多进程队列或管道的Python回调

时间:2018-11-26 21:32:44

标签: python multithreading concurrency multiprocessing

是否有一种方法可以创建一个回调,该回调在通过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 :(得分:2)

除了您已经发布的方法外,没有其他清洁的方法了。

这是实际实现concurrent.fututes.ProcessPoolExecutormultiprocessing.Pool的方式。它们有一个专用线程,可以耗尽任务/结果队列并运行任何关联的回调。

如果要保存一些资源,在这种情况下可以使用SimpleQueue