Uso il multiprocessing nel mio progetto. Ho una funzione worker che mette in coda i risultati. Tutto funziona bene Ma come aumenta la dimensione di x (nel mio caso x è un array) qualcosa è andato storto. Qui è una versione semplificata del mio codice:Elaborazione multipla in python bloccata
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
vedo nel sistema monitorare i processi di pitone di lavoro, ma poi qualcosa accadrà e tutti i processi sono in esecuzione, ma non fare nulla. Questo è ciò che ottengo quando digito ctrl-D.
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
Faccio qualche test. E il problema sembra essere nel mettere i risultati in coda, infatti se non metto i risultati tutto funziona, ma poi non ci sarebbe alcuno scopo.
Sembra non passare mai l'oggetto coda al nuovo processo. Anche 'args' di' Process' dovrebbe essere una 'tupla'. Prova a cambiarlo in 'args = (queue, i)'. Il tuo 'queue.get' richiede anche alcune parentesi in modo che diventi' queue.get() '. – Wessie