Обратный вызов Python для многопроцессной очереди или конвейера - PullRequest
0 голосов
/ 27 ноября 2018

Есть ли способ создать обратный вызов, который выполняется всякий раз, когда что-то отправляется в основной процесс от дочернего процесса, инициированного через multiprocessing?Лучшее, что я могу себе представить, это:

import multiprocessing as mp
import threading
import time    

class SomeProcess(mp.Process):
    def run(self):
        while True
            time.sleep(1)
            self.queue.put(time.time())

class ProcessListener(threading.Thread):
    def run(self):
        while True:
            value = self.queue.get()
            do_something(value)

if __name__ = '__main__':
    queue = mp.Queue()
    sp = SomeProcess()
    sp.queue = queue
    pl = ProcessListener()
    pl.queue = queue
    sp.start()
    pl.start()

1 Ответ

0 голосов
/ 27 ноября 2018

Нет, нет другого чистого способа сделать это, чем тот, который вы уже опубликовали.

Так действительно реализуются concurrent.fututes.ProcessPoolExecutor и multiprocessing.Pool.У них есть специальный поток, который истощает очередь задач / результатов и запускает любой связанный обратный вызов.

Если вы хотите сохранить какой-либо ресурс, вы можете использовать SimpleQueue в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...