提供了多种进程通信
一般来说进程之间是并行的,在实际的工程中时,常常是两个进程之间是有一定关系的,比如我现在需要完成任务一(进程1——>进程2进行加工和处理),所以必须然后让进程之间通信,此时我们必须要搭建一个桥梁,这个时候我就需要用到数据结构,队列 。
再比如博主做的项目中,语音播报模块需要等目标检测模块中的值,这个时候我们应该怎么办呢?这里就涉及到进程的通信 。提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信 。
Queue有两个方法:
文章插图
from multiprocessing import Process, Queue, set_start_methodimport time,random,os#创建队列,容量为3q=Queue(3)q.put(1)q.put(2)q.put(3)q.put(4,timeout=3)#一直没执行,意思是等待3秒 。
from multiprocessing import Process, Queue, set_start_methodimport time,random,os#创建队列,容量为3q=Queue(3)q.put(1)q.put(2)q.put(3)print(q.qsize())while True:if not q.empty():print(q.get())else:print("该队列已为空")break
举个栗子:
比如现在我有一个任务是下载音乐然后保存音乐:
from multiprocessing import Process, Queue, set_start_methodimport time,random,os#下载音乐def load_music(q):music_list=["1","2","3","4","5"]for i in music_list:print('正在下载<{}>音乐'.format(i))q.put(i)#把下载好的音乐存入队列#保存音乐def save_music(q):while True:if not q.empty():print('把<{}>音乐存入D盘'.format(q.get()))else:print("该队列已为空")breakif __name__ == '__main__':q=Queue(4)p1 = Process(target=load_music,name='目标检测',args=(q,))p2 = Process(target=save_music,name='保存音乐',args=(q,))#启动子进程,写入p1.start()p2.start()
再举一个我项目中的例子:
【python提供了多种进程通信】
from multiprocessing import Process, Queue, set_start_methodimport time,random,os#目标检测def load(q1,q2):state_list=["red","green"]dis_list=["1", "2", "3", "4", "5"]for i in state_list:print('检测当前的状态<{}>'.format(i))q1.put(i)#把当前的状态存入队列for i in dis_list:print('检测当前的距离<{}>'.format(i))q2.put(i)#把当前的状态存入队列#语音播报def save(q1,q2):while True:if not q1.empty():print('把状态<{}>语音播报'.format(q1.get()))else:print("该队列已为空")breakwhile True:if not q2.empty():print('把距离<{}>语音播报'.format(q2.get()))else:print("该队列已为空")breakif __name__ == '__main__':q1=Queue(2)q2=Queue(5)p1 = Process(target=load,name='目标检测',args=(q1,q2,))p2 = Process(target=save,name='语音播报',args=(q1,q2,))#启动子进程,写入p1.start()p2.start()
- 《神探夏洛克》你看了没?盘点世界历史上的名侦探 世界十大侠盗
- 轮到中国欺负美国了?央视曝光秘密武器,中国的实力可以碾压20年 世界之最看中国中国之最
- 了不起,中国最绚丽长城,位于河北,新闻联播的国歌中曾每天出现 中国之最中国之美
- 1999年出生,当红的18岁童星,她已经拿了两个吉尼斯世界纪录了! 吴磊吉尼斯记录
- 布达拉宫的厕所,网友:可以申请吉尼斯世界纪录了 吉尼斯记录最大厕所
- 征文不易,一个不小心,白浪费了两天的辛苦 吉尼斯记录浪费作文
- 小冰球大市场,斯柯达坚持26年得到了什么? 斯柯达吉尼斯记录
- 历史上“最厉害”的七个人,诸葛亮进不了前五,第一是谁? 古代历史上之最的人物
- 那个不被允许踢球的女孩,长大后登上了世界之巅 世界之最历史介绍视频播放
- 山东有多牛?来看这12个中国第一就知道了!网友:越看越佩服 山东历史上的全国之最