2017-08-29 1 views
0

Hier mein Testcode ist mehrere Verfahren, um zu versuchen Ausführung:, wie das Ergebnis in verschiedenen Teilprozess aggregieren mit Multiprozessing

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' 

Von jedem Subprozess, konnte ich verschiedene Segmente am Ende nach p.join(), wie [4, 7],[2],[1, 6],[3, 5],[0, 8, 9] erhalten gedruckt. Aber das Problem ist, wie man diese Segmente zu einer Einheit [0,1, ..., 10] aggregiert, um zu drucken?

Alle Gedanken wären hilfreich.

Antwort

0

Jeder Prozess hat seine eigene Kopie der a Liste, so dass sie nicht an das gleiche Objekt anhängen und Ihr Hauptprozess wird nicht die Ergebnisse erhalten. Sie müssen multiprocessing.Queue verwenden und stattdessen Ihre Ergebnisse in die Warteschlange stellen. Dann kann Ihr Hauptprozess die Ergebnisse aus der Warteschlange entfernen und sie nach Bedarf verarbeiten.

Verwandte Themen