您将需要一个multiprocessing.Pipe或multiprocessing.Queue将结果发送回您的父进程.如果你只做I / 0,你应该使用Thread而不是Process,因为它更轻巧,大部分时间花在等待上.我告诉你一般来说Process和Threads是如何完成的.
处理队列
多处理队列构建在管道之上,访问与锁/信号量同步.队列是线程和进程安全的,这意味着您可以将一个队列用于多个生产者/消费者进程,甚至可以在这些进程中使用多个线程.添加队列中的第一个项目也将在调用进程中启动馈送器线程. multiprocessing.Queue的额外开销使得使用管道为单生产者/单一消费者场景更好,更高性能.
以下是使用multiprocessing.Queue发送和检索结果的方法:
from multiprocessing import Process, Queue
SENTINEL = 'SENTINEL'
def sim_busy(out_queue, x):
for _ in range(int(x)):
assert 1 == 1
result = x
out_queue.put(result)
# If all results are enqueued, send a sentinel-value to let the parent know
# no more results will come.
out_queue.put(SENTINEL)
if __name__ == '__main__':
out_queue = Queue()
p = Process(target=sim_busy, args=(out_queue, 150e6)) # 150e6 ==