本文共 1365 字,大约阅读时间需要 4 分钟。
1、采用Queue队列通信
from multiprocessing importProcess, Queuedeff(q,n):
q.put([42, n, ‘hello‘])if __name__ == ‘__main__‘:
q=Queue()
p_list=[]for i in range(3):
p= Process(target=f, args=(q,i))
p_list.append(p)
p.start()print(q.get())print(q.get())print(q.get())for i inp_list:
i.join()
2、采用Pipe管道通信
‘‘‘
由PIPER()返回的两个连接对象表示管道的两端。
每个连接对象都有SeNe()和ReCVE()方法(除其他之外)。
注意,如果两个进程(或线程)试图同时从管道的同一端读取或写入数据,
那么管道中的数据可能会损坏。
当然,在使用管道的不同端部的过程中不存在腐败风险。
‘‘‘
from multiprocessing importProcess, Pipedeff(conn):
conn.send([42, None, ‘hello‘]) #子进程发送
conn.close()if __name__ == ‘__main__‘:
parent_conn, child_conn=Pipe()
p= Process(target=f, args=(child_conn,))
p.start()print(parent_conn.recv()) #主进程接收 prints "[42, None, ‘hello‘]"
p.join()
3、采用Manager管理器对象通信
Manager用于管理数据共享
‘‘‘
Manager()返回的管理器对象控制保存Python对象的服务器进程,
并允许其他进程使用代理操作它们。
Manager()返回的管理器将支持类型:list,dict, Namespace, Lock, RLock,
Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array
‘‘‘
from multiprocessing importProcess, Managerdeff(d, l,n):
d[n]= ‘1‘d[‘2‘] = 2d[0.25] =None
l.append(n)print(l)if __name__ == ‘__main__‘:
with Manager() as manager: #with 类似 f = Open()格式
d=manager.dict()
l= manager.list(range(5))
p_list=[]for i in range(10):
p= Process(target=f, args=(d, l,i))
p.start()
p_list.append(p)for res inp_list:
res.join()print(d)print(l)
原文:https://www.cnblogs.com/chenhaiming/p/9919394.html
转载地址:https://blog.csdn.net/weixin_33946505/article/details/113975045 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!