如何使用多处理在不同的子进程中聚合结果

how to aggregate the result in different subprocess with multiprocessing

这是我尝试执行多进程的测试代码:

from multiprocessing import Process, Pool, Queue
a = []
def long_time_task(name):
    print 'run task %s (%s)'  % (name,os.getpid())
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    a.append(name)
    print a

if __name__ == '__main__' :
    print 'parent process %s' % os.getpid()
    p = Pool(5)
    for i in range(10):
        p.apply_async(long_time_task,args = (i,))
    print 'waiting for all subprocess done'
    print a
    p.close()
    p.join()
    print 'all subprocesses done'

在每个子流程中,我可以在 p.join() 之后的末尾打印不同的段,例如 [4, 7],[2],[1, 6],[3, 5],[0, 8, 9]。但问题是如何将这些段聚合成一个实体 [0,1,...,10] 来打印?

任何想法都会有所帮助。

每个进程都有自己的 a 列表副本,因此它们不会附加到同一个对象,您的主进程也不会获得结果。 您需要使用 multiprocessing.Queue 并将您的结果排在那里。 然后,您的主进程可以将结果出列并根据需要进行处理。

你看到的是进程间的通信。您可以使用此处文档中描述的队列:

https://pymotw.com/2/multiprocessing/communication.html