Multiprocessing Pool 'apply_async' scheint die Funktion nur einmal aufzurufen
Ich habe die Dokumente befolgt, um zu versuchen, Multiprocessing-Pools zu verstehen. Das habe ich mir ausgedacht:
import time
from multiprocessing import Pool
def f(a):
print 'f(' + str(a) + ')'
return True
t = time.time()
pool = Pool(processes=10)
result = pool.apply_async(f, (1,))
print result.get()
pool.close()
print ' [i] Time elapsed ' + str(time.time() - t)
Ich versuche 10 Prozesse zu verwenden, um die Funktion zu bewertenf(a)
. Ich habe eine Druckanweisung in @ gesetf
.
Dies ist die Ausgabe, die ich bekomme:
$ python pooltest.py
f(1)
True
[i] Time elapsed 0.0270888805389
s scheint mir, dass die Funktionf
wird nur einmal ausgewertet.
Ich verwende wahrscheinlich nicht die richtige Methode, aber das Endergebnis, das ich suche, ist, @ auszuführef
mit 10 Prozessen gleichzeitig und erhalte das Ergebnis, das von jedem dieser Prozesse zurückgegeben wird. Ich würde also mit einer Liste von 10 Ergebnissen enden (die möglicherweise identisch sind oder nicht).
Die Dokumente zu Multiprocessing sind ziemlich verwirrend und es ist nicht trivial, herauszufinden, welchen Ansatz ich wählen sollte, und es scheint mir, dassf
sollte in dem oben angegebenen Beispiel 10 Mal ausgeführt werden.