前言
记录一下学习进度.
1.python多进程之Pipe
Pipe(管道)也是进程之间实现数据通信的一种方式.Pipe的原理就类似于socket,就是生成两头(管道的两头),一头给父进程,一头给子进程(或者可以理解管道的两头分别给两个进程,然后让这两个进程通过管道来实现数据的通信).
2.Pipe的用法
from multiprocessing import Process,Pipe
def func(conn):
conn.send([42,'fan','hello from child'])
conn.close()
if __name__ == '__main__':
Parent_conn,Child_conn = Pipe() # Pipe实例化时生成两个对象,分别对应管道的两头
p = Process(target=func,args=(Child_conn,))
p.start()
print('parent:',Parent_conn.recv())
执行结果:
parent: [42, 'fan', 'hello from child']
程序解释:
这里实现了两个进程的一收一发.
Parent_conn,Child_conn = Pipe() # Pipe实例化时生成两个对象,分别对应管道的两头
实例化Pipe时候会生成两个对象,分别对应管道的两头.
conn.send([42,'fan','hello from child'])
conn.close()
这两句代码实现了child_conn这一头发送数据.
print('parent:',Parent_conn.recv())
这是在另一头接收数据.
实现管道两头的互相收发
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello from child'])
conn.send([42, None, 'hello from child2'])
print("from parent:",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()
执行结果:
[42, None, 'hello from child']
[42, None, 'hello from child2']
from parent: 这是父进程
写在最后
本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.