JoinableQueue
#!/usr/bin/env python
# encoding: utf-8
# Date: 2018/6/17
import time
from multiprocessing import Process, JoinableQueue
def producer(q):
for i in range(10):
res = '包子 %s' % i
time.sleep(0.5) # 模拟生产者造一条数据的时间
print('生产者生产了%s' % res)
# consumer(res) # 生产者生产的数据不能直接交给消费者
q.put(res) # 生产者生产的数据交给容器queue
q.join() # 等到消费者把自己放入队列中的所有的数据都取走之后,生产者才结束
def consumer(q):
while True: # 一直接消息
res = q.get()
if res is None: break # 因为生产者最后一个放的是None
time.sleep(1)
print('消费者消费了%s' % res)
q.task_done() # 发送信号给q.join(),说明已经从队列中取走一个数据并处理完毕了
if __name__ == '__main__':
# 容器
# q = Queue() # 解耦和生产者和消费者
q = JoinableQueue()
p1 = Process(target=producer, args=(q, ))
p2 = Process(target=producer, args=(q, ))
p3 = Process(target=producer, args=(q, ))
# 消费者
c1 = Process(target=consumer, args=(q, ))
c2 = Process(target=consumer, args=(q, ))
c1.daemon = True
c2.daemon = True
p1.start()
p2.start()
p3.start()
c1.start()
c2.start()
p1.join() # 主进程保证生产者可以生产完毕
p2.join() # 主进程保证生产者可以生产完毕
p3.join() # 主进程保证生产者可以生产完毕
# q.put(None) # 生产完毕之后,添加一个None数据,这种模式生产者消费者多了就需要发多个None,并且joinN个生产者
# 1、主进程等生产者p1、p2、p3结束
# 2、而p1、p2、p3是在消费者把所有数据都取干净之后才会结束
# 3、所以一旦p1、p2、p3结束了,证明消费者也没必要存在了,应该随着主进程一块死掉,因而需要将生产者们设置成守护进程
print('主')
JoinableQueue的更多相关文章
- python JoinableQueue在生产者消费者项目中的简单应用
class multiprocessing.JoinableQueue([maxsize]) JoinableQueue, a Queue subclass, is a queue which add ...
- Python生产者producer和consumer消费者案例写法,含有多线程,包含队列queue、JoinableQueue队列的用法
import timeimport random import queuefrom multiprocessing import Process,Queue 案例一:def consumer(q,na ...
- Day034--Python--锁, 信号量, 事件, 队列, 生产者消费者模型, joinableQueue
进程同步: 1. 锁 (重点) 锁通常被用来实现对共享资源的同步访问.为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁, ...
- 进程队列补充-创建进程队列的另一个类JoinableQueue
JoinableQueue同样通过multiprocessing使用. 创建队列的另外一个类: JoinableQueue([maxsize]):这就像是一个Queue对象,但队列允许项目的使用者通知 ...
- 队列 Queue JoinableQueue
from multiprocessing import Process, Queue def f1(q); for i in range(10): q.put(i) def f2(q): whl ...
- 并发 --- 2 进程的方法,进程锁 守护进程 数据共享 进程队列, joinablequeue模型
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
- (9)进程---JoinableQueue队列
消费者模型-->存和取得过程 和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子 put 存入, get 获取 q. ...
- 进程锁,队列,JoinableQueue
内容梗概: 1.进程同步(锁) 2.队列(重点) 3.生产者消费者模式 4.JoinableQueue([maxsize]) 5.信号量(了解) 6.事件 1.进程同步(锁) 并发编程让我们能更加充分 ...
- 生产者消费者模型(Queue,JoinableQueue)
生产者消费者模型 主要是为解耦 借助队列来实现生产者消费者模型 栈:先进后出(First In Last Out 简称 FILO) 队列: 先进先出(First In First Out 简称 FIF ...
- joinablequeue模块 生产者消费者模型 Manager模块 进程池 管道
一.生产者消费者 主要是为解耦(借助队列来实现生产者消费者模型) import queue # 不能进行多进程之间的数据传输 (1)from multiprocessing import Queue ...
随机推荐
- http和https区别
超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文, ...
- Android架构设计之MVP分析
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51471280
- 基于Ubuntu16.04的GeForce GTX 1080驱动安装,遇到的问题及对应的解决方法
1.在主机上插上GPU之后,查看设备: $ nvidia-smi Tue Dec :: +------------------------------------------------------- ...
- Postfix邮件黑名单和白名单
本文主要介绍如何用Postfix添加域名黑名单和白名单,用以处理垃圾邮件. 1.修改postfix主配置文件,增加限制语句 vim /etc/postfix/main.cf # 文末添加一行,限制往本 ...
- linux 系统优化+定时任务
安装软件 通过yum安装 自动补全工具:yum completion yum install -y tree bash-completion wget vim find -[TAB] 更改系统的yum ...
- [sklearn]性能度量之AUC值(from sklearn.metrics import roc_auc_curve)
原创博文,转载请注明出处! 1.AUC AUC(Area Under ROC Curve),即ROC曲线下面积. 2.AUC意义 若学习器A的ROC曲线被学习器B的ROC曲线包围,则学习器B的性能优于 ...
- python中的字典两种遍历方式
dic = {"k1":"v1", "k2":"v2"} for k in dic: print(dic[K]) for ...
- BZOJ1597土地购买 【斜率优化DP】
BZOJ1597土地购买 [斜率优化DP] Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足( ...
- 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)
在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...
- 《DSP using MATLAB》示例Example 8.29
%% ------------------------------------------------------------------------ %% Output Info about thi ...