时间:2021-05-22
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 Queueimport 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] = valueif __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'}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
数据通信的系统模型由数据源、数据通信网和数据宿三部分组成。数据通信是通信技术和计算机技术相结合而产生的一种新的通信方式。 要在两地间传输信息必须有传输信道,根
前言数据通信在开发中是必不可少的一个环节,也是我们必须掌握的知识。知道得越多的数据通信方式,实现业务会更加得心应手。下面我将这些通信方式归类介绍:组件通信全局通
计算机网络通信系统是数据通信系统,数据通信系统,指的是通过数据电路将分布在远地的数据终端设备与计算机系统连接起来,实现数据传输、交换、存储和处理的系统。 通信
背景#目前我主要负责的一个项目是一个C/S架构的客户端开发,前端主要是通过WPF相关技术来实现,后端是通过Python来实现,前后端的数据通信则是通过MQ的方式
1.数据通信