Python回调函数用于多进程队列或管道

3

是否有一种方式可以创建一个回调函数,每当通过 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个回答

5

没有其他比你已经发布的方法更干净的方式来做。

这就是concurrent.futures.ProcessPoolExecutormultiprocessing.Pool的实际实现方式。它们有一个专用线程,排空任务/结果队列并运行任何相关回调函数。

如果您想节省一些资源,可以在这种情况下使用SimpleQueue


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接