首页 >> 大全

python提供了多种进程通信

2023-08-26 大全 25 作者:考证青年

提供了多种进程通信

一般来说进程之间是并行的,在实际的工程中时,常常是两个进程之间是有一定关系的,比如我现在需要完成任务一(进程1——>进程2进行加工和处理),所以必须然后让进程之间通信,此时我们必须要搭建一个桥梁,这个时候我就需要用到数据结构,队列

再比如博主做的项目中,语音播报模块需要等目标检测模块中的值,这个时候我们应该怎么办呢?这里就涉及到进程的通信。提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信。

Queue有两个方法:

实现进程到进程的通信_进程与进程的通信机制_

from multiprocessing import Process, Queue, set_start_method
import time,random,os
#创建队列,容量为3
q=Queue(3)
q.put(1)
q.put(2)
q.put(3)q.put(4,timeout=3)#一直没执行,意思是等待3秒。

from multiprocessing import Process, Queue, set_start_method
import time,random,os
#创建队列,容量为3
q=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_method
import 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("该队列已为空")break
if __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()

再举一个我项目中的例子

from multiprocessing import Process, Queue, set_start_method
import 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("该队列已为空")break
if __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()

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了