金狮镖局 Design By www.egabc.com
python提供了4种方式来满足进程间的数据通信
1. 使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建的进程间进行通信
2. 使用multiprocessing.Manager.Queue可以在Pool进程池创建的进程间进行通信
3. 通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue,但是它只能在两个进程间进行通信
4. 使用Manager类提供的数据结构可以进行进程间的通信
from multiprocessing import Process, Queue, Pool, Manager, Pipe # 注意线程间的通信,使用的queue.Queue # from queue import Queue import time # 1. 使用multiprocessing.Queue可以在进程间通信 # def producer(queue): # queue.put('A') # time.sleep(2) # # def consumer(queue): # time.sleep(2) # data = queue.get() # print(data) # # if __name__ == '__main__': # queue= Queue(10) # p = Process(target=producer, args=(queue,)) # c = Process(target=consumer, args=(queue,)) # p.start() # c.start() # p.join() # c.join() # 2. 使用共享全局变量,在多进程间通信(结论: 不行) # def producer(a): # a += 1 # time.sleep(2) # # # def consumer(a): # time.sleep(2) # print(a) # # if __name__ == '__main__': # a = 1 # p = Process(target=producer, args=(a,)) # c = Process(target=consumer, args=(a,)) # p.start() # c.start() # p.join() # c.join() # 3. multiprocessing.Queue不能用于multiprocessing.Pool进程池创建的进程间进行通信 # def producer(queue): # queue.put('A') # time.sleep(2) # # # def consumer(queue): # time.sleep(2) # data = queue.get() # print("consumer:%s" % data) # # # if __name__ == '__main__': # # queue = Queue(10) # 这个是使用multiprocessing.Queue,无效 # queue = Manager().Queue(10) # 这个是使用multiprocessing.Manager.Queue, 可以 # pool = Pool(2) # pool.apply_async(producer, args=(queue,)) # pool.apply_async(consumer, args=(queue,)) # pool.close() # pool.join() # 4.通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue # def producer(pipe): # pipe.send('admin') # # # def consumer(pipe): # data = pipe.recv() # print("consumer:%s" % data) # # # if __name__ == '__main__': # receive_pipe, send_pipe = Pipe() # """Pipe只能适应于两个进程间的通信""" # p = Process(target=producer, args=(send_pipe,)) # c = Process(target=consumer, args=(receive_pipe,)) # p.start() # c.start() # p.join() # c.join() # 5. 进程间通信的其它方式 def add_data(p_dict, key, value): p_dict[key] = value if __name__ == '__main__': progress_dict = Manager().dict() #Manager()类中提供的数据结构都能够做到进程的通信 first_progress = Process(target=add_data, args=(progress_dict, 'name', 'admin',)) second_progress = Process(target=add_data, args=(progress_dict, 'age', 45,)) first_progress.start() second_progress.start() first_progress.join() second_progress.join() print(progress_dict) #{'age': 45, 'name': 'admin'}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
python,进程,数据,通信
金狮镖局 Design By www.egabc.com
金狮镖局
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
金狮镖局 Design By www.egabc.com
暂无Python通过4种方式实现进程数据通信的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年09月26日
2024年09月26日
- 纯音入心系列纯音乐《中央民族乐团-古筝传奇》1CD[MP3][253.1MB]
- 江玲.1989-这样你才爱我,是吗?【新作有声】【WAV+CUE】
- 郭美美.2010-我是郭美美【华纳】【WAV+CUE】
- 黄心懋1991-轻忧郁【滚石】【WAV+CUE】
- 群星.2000-大地金曲世纪回顾2CD【大地】【WAV+CUE】
- 王菲.1996-浮躁(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 群星.2022-传家电视剧原声带【东阳欢娱】【FLAC分轨】
- 《摇滚教父 伍佰黄金精选 2CD》 [WAV+CUE][1GB]
- 《凤凰传奇 我从草原来》[WAV/分轨][400MB]
- 《叶倩文 真心真意过一生》[WAV+CUE][400MB]
- 潘越云.1985-世间女子(滚石25周年经典复刻版)【滚石】【WAV+CUE】
- 陈柏宇.2009-CANT.BE.HALF【SONY】【WAV+CUE】
- 李明依.1989-小女生【滚石】【WAV+CUE】
- 《李荣浩 新时代创作新人王》[WAV分轨][310MB]
- 《黑鸭子与马头琴 史上最动听草原音乐》[WAV+CUE][320MB]