首页 > 其他 > 详细

(9)JoinableQueue队列

时间:2019-04-28 22:28:56      阅读:186      评论:0      收藏:0      [点我收藏+]

消费者模型-->存和取得过程

put 存入 get 获取

q.task_done 通过队列其中一个数据被处理

JoinableQueue 默认会计数,执行一次task_done减少一次队列数

JoinableQueue 里面有5个值,task_done减少一个,减到0 , 队列里面的值为空

q.join() 添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞

from multiprocessing import Process,JoinableQueue

import random

import time

def consumer(q,name):

while True:

food = q.get()

time.sleep(random.uniform(0.5,1))

print("%s接受了 %s" % (name,food))

q.task_done() #队列里面每少一个,task_done计数就少一个,计数为0时,发消息给join撤销阻塞

def producer(q,name,food):

for i in range(5):

time.sleep(random.uniform(0.3,0.8))

print("%s生产了 %s" % (name,food+str(i)))

q.put(food+str(i))

if __name__ == "__main__":

jq = JoinableQueue()

c1 = Process(target=consumer,args=(jq,"周金波"))

c1.daemon = True

c1.start()

p1 = Process(target=producer,args= (jq,"张何伟","香吻"))

p1.start()

p1.join() # 生产者需要把所有数据放到队列当中

#添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞

# 通过task_done 表达处理掉的意思

# join 和 task_done 需要配合使用;

jq.join()

 

 

(9)JoinableQueue队列

原文:https://www.cnblogs.com/lyj910313/p/10787271.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!