Python--day38--JoinableQueue解决生产者消费者模型

news/2024/7/7 20:04:40 标签: python

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

# 在消费者这一端:
    #每次获取一个数据
    #处理一个数据
    #发送一个记号:标志一个数据被处理成功

#在生产者这一端:
  #每一次生成一个数据
  #且每一次生产的数据都放在队列中
  #在队列中刻上一个记号
  #当生产者全部生产完毕之后,
  #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             break
11         print('\033[31m%s消费了%s\033[0m' %(name,food))
12         time.sleep(random.randint(1,3))
13         q.task_done()   #count -1
14 
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 ...20
21     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 = True
34     c1.start()
35     c2.start()
36     p1.join()
37     p2.join()   #join()感知一个进程的结束
38     q.put(None)

 

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


http://www.niftyadmin.cn/n/835529.html

相关文章

黑客帝国装逼的代码雨

在桌面新建一个.txt文件&#xff0c;把下面代码放进去&#xff0c;再把后缀名改成.html&#xff0c;双击打开就好了 <!DOCTYPE html> <html> <head><title>黑客帝国</title> </head> <body> <canvas id"canvas">&l…

如何将数组数据写入文件

使用file_put_contents()将数组数据写入文件 $arr array( name>李逵&#xff0c; age>99, sex>男 ) $str var_export($arr,TRUE); 文章来源&#xff1a;刘俊涛的博客 地址&#xff1a;http://www.cnblogs.com/lovebing 欢迎关注&#xff0c;有问题一起学习欢迎留言、…

Android Bundle详解

1.Bundle简介&#xff1a; Bundle主要用于传输数据&#xff0c;它保存的数据&#xff0c;是以key-value的形式存储的。Bundle常用于在Activity间传递数据 &#xff0c;当不bundle传递的是对象或对象数组时&#xff0c;必须实现Serializable或Parcelable接口&#xff0c;下面分别…

公共DNS服务器整理

转载请注明文章出处&#xff1a;https://tlanyan.me/public-dns... 本文整理知名的国内外公共DNS服务器。稳定、可靠、优质的DNS服务会消耗不少资源&#xff0c;因此对公众开发的DNS服务一般由大公司、机构或ISP提供。 不少公司提供了各具特色的DNS服务&#xff0c;本文将根据官…

15分钟在笔记本上搭建 Kubernetes + Istio开发环境

2019独角兽企业重金招聘Python工程师标准>>> 11月13~15日&#xff0c;KubeCon 上海大会召开&#xff0c;云原生是这个秋天最火热的技术。很多同学来问如何上手 Kubernetes和Istio 服务网格开发。本文将帮助你利用Docker CE桌面版&#xff0c;15分钟在笔记本上从零搭…

我的文章01号

测试一下博客怎么样 看样还不错&#xff01;哈哈

JavaScript函数--声明和调用、形参与实参

1、JavaScript函数的声明和调用&#xff1a; JavaScript函数的声明和调用:就是把一段相对独立的具有特定功能的代码块封装起来&#xff0c;(写到一个地方) 会形成一个独立实体&#xff0c;就是函数&#xff0c;可以起个名字(函数名)&#xff0c;在后续的开发中可以反复调用函数…

leetcode 地下城游戏

一些恶魔抓住了公主&#xff08;P&#xff09;并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士&#xff08;K&#xff09;最初被安置在左上角的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正…