2017-06-29 4 views
0

Ich versuche, das Ergebnis von Prozessen, die parallel in Python laufen. Hier ist der Code.Bestellung im Prozess Pool Python

from dateutil.parser import parse 
from multiprocessing.dummy import Pool 
from itertools import * 
import time 
import random 

def abcd(a): 
    time.sleep(a) 
    print(a) 
    return a 

p = Pool(3) 
a = p.starmap(abcd, zip([10, 2, 15])) 
p.close() 
p.join() 
print(a) 

Wird das Ergebnis immer in der Reihenfolge des Arrays innerhalb von zip zurückgegeben?

Antwort

1

Pool.starmap (und Pool.map) werden die Werte in der Reihenfolge der an sie übergebenen Argumente zurückgeben - dies bedeutet jedoch nicht, dass sie in der richtigen Reihenfolge ausgeführt werden. Wenn Sie sich nicht um Reihenfolge kümmern und sind in Ordnung mit ungeordneten Ergebnisse (und möglicherweise mehr Leistung) gibt es Pool.imap_unordered.

Siehe the documentation

0

Es kann nicht garantiert werden, dass sie in der gleichen Reihenfolge angezeigt werden, da das OS schließlich die Planung der Prozesse übernimmt. Sie können in der gleichen Reihenfolge enden, und Sie können die Chancen erhöhen, wenn Sie chunksize auf 1 in starmap() setzen. Andernfalls werden die Ergebnisse bestenfalls in Ausführungsreihenfolge gruppiert nach Chunk-Größe angezeigt.

Wenn Sie später die ursprüngliche Reihenfolge wissen müssen, ist der Trick, den ich verwende, einfach einen Index (oder numpy.ndindex für n-dimensionale Daten), der gerade von der Worker-Funktion ausgegeben wird.