Ich versuche zu verstehen, wie Multiprozess-Pools arbeiten. In der folgenden Programmierung habe ich einen Pool von 4 Prozessen erstellt.Verwendung von apply_async mit Callback-Funktion für einen Pool von Prozessen
Und ich rufe apply_async
mit einer Callback-Funktion, die eine Liste aktualisieren sollte result_list
genannt
import Queue
from multiprocessing import Process
from multiprocessing import Pool
result_list = []
def foo_pool(q): #Function for each process
print "foo_pool"
if(q.qsize() > 0):
number = q.get()
return number * 2
def log_result(result):
# This is called whenever foo_pool(i) returns a result.
# result_list is modified only by the main process, not the pool workers.
result_list.append(result)
if __name__ == "__main__":
q = Queue.Queue()
for i in range(4):
q.put(i + 1) #Put 1..4 in the queue
p = Pool(4)
p.apply_async(foo_pool, args = (q,), callback = log_result)
Ich weiß, ich habe keine Warteschlange hier verwenden müssen. Aber ich teste das für ein anderes Programm, das erfordert, dass ich eine Warteschlange benutze. Wenn ich das Programm starte, wird die Funktion foo_pool nicht aufgerufen. Die Druckanweisung print "foo_pool"
wird nicht ausgeführt. Warum ist das?