Ich verwende Multiprocessing in meinem Projekt. Ich habe eine Arbeiterfunktion, die die Ergebnisse in eine Warteschlange stellt. Alles funktioniert gut. Aber wenn die Größe von x zunimmt (in meinem Fall ist x ein Array), ist etwas falsch gelaufen. Hier ist eine vereinfachte Version von meinem Code:Multiprocessing in Python blockiert
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
ich im System sehen überwachen, die Python-Prozesse arbeiten, aber dann etwas passieren und alle Prozesse laufen aber nichts zu tun. Das ist, was ich bekomme, wenn ich ctrl-D eintippe.
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
Ich mache ein paar Tests. Und das Problem sieht so aus, als würde man die Ergebnisse in die Warteschlange stellen, wenn ich die Ergebnisse nicht packe, funktioniert alles, aber dann wäre es sinnlos.
Sie scheinen das Warteschlangenobjekt niemals an den neuen Prozess zu übergeben. Auch "Args" von "Process" sollte ein "Tupel" sein. Versuchen Sie es in 'args = (queue, i)' zu ändern. Ihr 'queue.get' benötigt ebenfalls einige Klammern, so dass es' queue.get() 'wird. – Wessie