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

标签 python multiprocessing pipe

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

考虑以下代码:

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()

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

最佳答案

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

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

关于使用管道的Python多进程非阻塞相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50031613/

相关文章:

Python 神经网络强化学习

python - 多处理模块中的 ThreadPool 与 Pool 有什么区别?

java - 在单独的连续行中打印 3 个 JAVA 程序的输出,共享同一控制台,在多处理场景中使用\r

date - Angular 2 日期管道添加或子小时

unix - 使用 >> 将多个并行进程的输出通过管道传输到一个文件是否安全?

python - 确定两个字符串匹配多少

javascript - Python和Javascript的模板系统?

python - 来自 sk_learn 的 LogisticRegression 和来自 statsmodels.formula.api 的 smf.logit() 返回不同的结果

Python多线程+多处理BrokenPipeError(子进程未退出?)

mySQL LIKE 管道上的查询