2017-08-29 34 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,並將結果排入隊列。 然後,您的主進程可以將結果出隊並根據需要處理它們。