消费者模型-->存和取得过程
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()
原文:https://www.cnblogs.com/lyj910313/p/10787271.html