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.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage