是否有一种方法可以创建一个回调,该回调在通过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()
答案 0 :(得分:2)
除了您已经发布的方法外,没有其他清洁的方法了。
这是实际实现concurrent.fututes.ProcessPoolExecutor
和multiprocessing.Pool
的方式。它们有一个专用线程,可以耗尽任务/结果队列并运行任何关联的回调。
如果要保存一些资源,在这种情况下可以使用SimpleQueue
。