Многопроцессное неблокирующее взаимодействие Python с использованием Pipes - PullRequest
0 голосов
/ 26 апреля 2018

Можно ли получать взаимосвязи процессов, используя каналы, неблокирующим образом?

Рассмотрим следующий код:

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 досообщение получено.Есть ли способ прослушивания сообщений неблокирующим способом?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Используйте функцию опроса.Измените цикл while следующим образом:

 while True:
       print('Test')
       if parent_conn.poll():
           msg = parent_conn.recv()
           if msg == 'Done':
              break
       else:
           do_something_else()
0 голосов
/ 26 апреля 2018

В соответствии с multiprocessing.Pipe() и multiprocessing.Connection документов, Connection имеет метод poll() для этого.

...