2017-08-29 50 views
0

汇总结果在不同的子这里是我的测试代码,试图执行多个进程:如何与多处理

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]来打印?

任何想法都会有所帮助。

回答

0

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