python 进程间的数据交互
Queue 的方式:
# -*- coding: utf-8 -*- from multiprocessing import Queue,Process ''' 将queue 通过参数的形式进行传递,这个queue 实际是复制一份到子进程中,当子进程的queue改变后 会有一个中间方将queue进行序列化 , 在反序列化到父进程的queue中 如果要使用线程的queue ,就会报一个pickle _thread lock 的异常,就是因为线程的queue 不能被序列化导致的 ''' def f(q1): q1.put('aaa') if __name__=='__main__': q = Queue() p = Process(target = f,args=(q,)) p.start() print(q.get()) p.join()
管道方式 :
# -*- coding: utf-8 -*- from multiprocessing import Process,Pipe def run(conn): conn.send('aaa') conn.close() if __name__=='__main__': parent_conn,child_conn = Pipe() p = Process(target=run,args=(child_conn,)) p.start() print(parent_conn.recv()) p.join()
manager 方式:
# -*- coding: utf-8 -*- ''' 用 manager.dict() 和manager.list()生成的 列表和字典可以实现共享 一般进程间的共享使用这种方式 ''' from multiprocessing import Process,Manager def f(d,l): d[1]='1' d['2']=2 d[0.25]=None l.append(1) print(l) if __name__=='__main__': with Manager() as manager: #生成一个字典 , 可在多个进程间传递 d = manager.dict() l = manager.list(range(5)) p_list=[] for i in range(10): p = Process(target=f,args=(d,l)) p.start() p_list.append(p) for res in p_list: res.join() print(d) print(l)
posted on 2017-12-14 10:18 gaizhongfeng 阅读(1679) 评论(0) 编辑 收藏 举报