1、作用:进程之间的数据交互

2、常用方法

"""
对象.put()
作用:放入队列一个数据
对象.get()
作用:取队列一个数据,若队列没有值,则阻塞
对象.empty()
作用:判断队列是否为空
对象.full()
作用:判断队列是否为满 """

3、例子

"""
子进程Process-1 和 子进程Process-2进行数据传输
"""
from multiprocessing import Queue
from multiprocessing import Process def new_put(q):
q.put('你好') def new_get(q):
ret = q.get()
print(ret) if __name__ == '__main__':
q = Queue()
p = Process(target=new_put, args=(q, ))
p.start()
print(p.name)
g = Process(target=new_get, args=(q, ))
g.start()
print(g.name)

4、生产者消费者模型

import time
import random
from multiprocessing import Process
from multiprocessing import Queue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f) def consumer(name, q):
while 1:
f1 = q.get()
if f1 is None:
break
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2)) if __name__ == '__main__':
q = Queue()
p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.start()
p.join()
p2.join()
q.put(None)
q.put(None)

优化

import time
import random
from multiprocessing import Process
from multiprocessing import JoinableQueue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f)
q.join() def consumer(name, q):
while 1:
f1 = q.get()
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2))
q.task_done() if __name__ == '__main__':
q = JoinableQueue() p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.daemon = True
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.daemon = True
c2.start()
p.join()
p2.join()

过程:主进程等待->生产者进程,生产者等待->消费者
p.join()->q.join()->c,task_down()
obj.join()
作用:阻塞,直到队列里的所有值被处理,一般在生产者进程中和put()方法一起使用
obj.task_down()
作用:向q.join()发送信号量,表名q.get()的值,已经被处理
注意:给消费者设置守护进程,队列的数据处理完毕后,消费者再执行下去,没有意义

python 进程Queue的更多相关文章

  1. Python开发【笔记】:what?进程queue还能生产出线程!

    进程queue底层用线程传输数据 import threading import multiprocessing def main(): queue = multiprocessing.Queue() ...

  2. python 进程和线程

    python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...

  3. Python 进程

    安装Python的paramiko模块 步骤: 1:管理员方式打开cmd,切换到python安装路径的Scripts目录下: 2:执行命令: 1 pip3.5.exe install paramiko ...

  4. python进程、线程、协程(转载)

    python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...

  5. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  6. python——进程、线程、协程

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...

  7. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

  8. Python 进程间数据交互

    进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换     Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...

  9. Python中Queue模块及多线程使用

    Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...

随机推荐

  1. P1068 压缩技术

    题目描述 设某汉字由N × N的0和1的点阵图案组成. 我们依照以下规则生成压缩码.连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下.第一个数表示连续有几个0,第二 ...

  2. P1019 聪聪理扑克

    题目描述 聪聪的两个小伙伴灵灵和豪豪喜欢打扑克,什么斗地主.德州.牛牛,他们都玩的有模有样. 但是每次玩好扑克他们都不整理一下,所以整理扑克的任务就交到了聪聪的手上. 已知现在桌面上有 n 张扑克牌, ...

  3. multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded

    情景再现: 上传文件到.net(wcf)后台时,总是上传不成功,后台要求Content-Type是application/octet-stream,我使用multipart/form-data方式,c ...

  4. Linux 内核硬件资源

    一个 ISA 设备可配备有 I/O 端口, 内存区, 和中断线. 尽管 x86 处理器支持 64 KB I/O 端口内存(即, 处理器有 16 条地址线), 一些老 PC 硬 件仅解码最低的 10 位 ...

  5. spring boot 多数据源加载原理

    git代码:https://gitee.com/wwj912790488/multiple-data-sources DynamicDataSourceAspect切面 必须定义@Order(-10) ...

  6. webstorm一键格式化为Eslint标准

  7. 【Linux】一个定时任务小脚本

    需要一个定时任务,每隔固定时间停止,等待几分钟,然后在启动,每5分钟一个循环. 简要写了一下,如下,未来在优化: 3,8,13,18,23,28,33,38,43,48,53,58 * * * * s ...

  8. github权限管理

    引用自:https://www.cnblogs.com/zhaoyanjun/p/5882784.html 前言: 在上一篇文章中Android github 快速实现多人协作 (http://www ...

  9. python之面向对象中的多态

    直接看代码: class Dog: def __init__(self,name): self.name = name def play(self): print("%s在汪汪汪" ...

  10. $exLucas$学习笔记

    本来不打算写了的,,,但是感$jio$理解起来还是有点儿难度的来着,,,$so$还是瞎写点儿趴$QAQ$ $exLucas$主要有三步: 1)唯一分解$mod$并预处理$p^{k}$以内的阶乘 2)计 ...