使用Pipes的Python多进程非阻塞互通

时间:2018-04-25 21:27:42

标签: python multiprocessing pipe

是否可以以非阻塞的方式使用管道接收进程间的相互通信?

请考虑以下代码:

(Conv2d)\((\d+),\s(\d+),\skernel_size=\((\d+),\s(\d+)\),\sstride=\((\d+),\s(\d+)\),\spadding=\((\d+),\s(\d+)\)\)

from multiprocessing import Process, Pipe import time def f(conn): time.sleep(3) conn.send('Done') conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target=f, args=(child_conn,)) p.start() while True: print('Test') msg = parent_conn.recv() if msg == 'Done': break print('The End') p.join() 将阻止while循环,直到收到消息。有没有办法以非阻塞的方式收听消息?

2 个答案:

答案 0 :(得分:2)

使用轮询功能。像这样改变你的while循环:

 while True:
       print('Test')
       if parent_conn.poll():
           msg = parent_conn.recv()
           if msg == 'Done':
              break
       else:
           do_something_else()

答案 1 :(得分:1)

根据multiprocessing.Pipe()multiprocessing.Connection文档,Connection具有poll()方法。