进程通信的第一种方式
from multiprocessing import Process,Queue def f(q): q.put([42,2,'hello']) print('zi q id:', id(q)) # 进程的id不同 说明q队列是拷贝的 if __name__=='__main__': q=Queue() print('main q id:',id(q)) # 在主进程下面创建的q # 两个进程的数据是相互独立的,两者之间没有关系 p_list=[] for i in range(3): p=Process(target=f,args=(q,)) p_list.append(p) p.start() print(q.get()) print(q.get()) print(q.get()) for i in p_list: i.join()
进程通信的第二种方式:
from multiprocessing import Process,Pipe def f(conn): conn.send('约吗') conn.send('约吗') print(conn.recv()) conn.close() if __name__=='__main__': parent_conn,child_conn=Pipe() p=Process(target=f,args=(child_conn,)) p.start() print(parent_conn.recv()) print(parent_conn.recv()) parent_conn.send('约') p.join()
from multiprocessing import Process,Queue
def f(q):
q.put([42,2,'hello'])
print('zi q id:', id(q))
# 进程的id不同 说明q队列是拷贝的
if __name__=='__main__':
q=Queue()
print('main q id:',id(q))
# 在主进程下面创建的q
# 两个进程的数据是相互独立的,两者之间没有关系
p_list=[]
for i in range(3):
p=Process(target=f,args=(q,))
p_list.append(p)
p.start()
print(q.get())
print(q.get())
print(q.get())
for i in p_list:
i.join()