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

Vin*_*oft 4 python pipe multiprocessing

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

考虑以下代码:

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()
Run Code Online (Sandbox Code Playgroud)

parent_conn.recv(),直到接收到消息将阻止while循环。有没有办法以非阻塞的方式监听消息?

Pau*_*ius 7

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

 while True:
       print('Test')
       if parent_conn.poll():
           msg = parent_conn.recv()
           if msg == 'Done':
              break
       else:
           do_something_else()
Run Code Online (Sandbox Code Playgroud)