簡體   English   中英

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

[英]Python multiprocess non-blocking intercommunication using Pipes

是否可以使用非阻塞方式使用管道來接收過程互通?

考慮以下代碼:

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

根據multiprocessing.Pipe()multiprocessing.Connection文檔, Connection具有為此的poll()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM