python多进程间通信_PYTHON——多进程:进程间通信和数据共享

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值