博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python--day38--JoinableQueue解决生产者消费者模型
阅读量:7061 次
发布时间:2019-06-28

本文共 1498 字,大约阅读时间需要 4 分钟。

#############################

# 在消费者这一端:

    #每次获取一个数据
    #处理一个数据
    #发送一个记号:标志一个数据被处理成功
#在生产者这一端:
  #每一次生成一个数据
  #且每一次生产的数据都放在队列中
  #在队列中刻上一个记号
  #当生产者全部生产完毕之后,
  #join信号:已经停止生产数据了
    #且要等待之前被刻上的记号都被消费完
    #当数据都被处理完时,join阻塞结束
#consumer 中把所有的任务消耗完
#producer端的join感知到,停止阻塞
#所有的producer进程结束
#主进程中的p.join结束
#主进程中代码结束
#守护进程(消费者的进程)结束

生产者消费者模型.py

1 import random 2 import time 3 from multiprocessing import JoinableQueue, Process 4  5 def consumer(q,name): 6     while True: 7         food = q.get() 8         if food is None: 9             print('%s获取到了一个空',name)10             break11         print('\033[31m%s消费了%s\033[0m' %(name,food))12         time.sleep(random.randint(1,3))13         q.task_done()   #count -114 15 def producer(name,food,q):16     for i in range(4):17         time.sleep(random.randint(1,3))18         f = '%s生产了%s%s'%(name,food,i)19         print(f)20         q.put(f)    #0 1 ...2021     q.join()    #阻塞 直到一个队列中的数据全部被执行完毕22 23 24 if __name__ == '__main__':25     q = JoinableQueue(20)26     p1 = Process(target=producer,args=('Egon','包子',q))27     p2 = Process(target=producer,args=('wusir','泔水',q))28     c1 = Process(target=consumer,args=(q,'alex'))29     c2 = Process(target=consumer,args=(q,'jinboss'))30     p1.start()31     p2.start()32     c1.daemon = True    #设置为守护进程 主进程中的代码执行完毕之后,子进程自动结束33     c2.daemon = True34     c1.start()35     c2.start()36     p1.join()37     p2.join()   #join()感知一个进程的结束38     q.put(None)

 

转载于:https://www.cnblogs.com/xudj/p/10327256.html

你可能感兴趣的文章
MySQL: load data infile
查看>>
[转]HTML accesskey 属性
查看>>
I/O多路复用详解
查看>>
Linq使用Group By经验总结
查看>>
Ajax原生写法
查看>>
无线遥控器方案 Si4010/Si4012
查看>>
Hulu面试题
查看>>
On iPad, UIImagePickerController must be presented via UIPopoverController
查看>>
项目管理沟通计划
查看>>
IntelliJ IDEA 12.1.4 解决中文乱码
查看>>
据说每个大牛、小牛都应该有自己的库——DOM处理
查看>>
第一章 初识MVC4
查看>>
red ant
查看>>
树的子结构
查看>>
ireport常见问题
查看>>
Advanced Awk for Sysadmins
查看>>
动态Pivot(2)
查看>>
用MATLAB实现字符串分割
查看>>
EntityFramework ,ef 介绍
查看>>
C#代码 json类
查看>>