Nel seguente codice di esempio, mi piacerebbe recuperare il valore restituito dalla funzione worker
. Come posso fare questo? Dove è memorizzato questo valore?Come posso recuperare il valore restituito da una funzione passata a multiprocessing.Process?
Esempio di codice:
import multiprocessing
def worker(procnum):
'''worker function'''
print str(procnum) + ' represent!'
return procnum
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print jobs
uscita:
0 represent!
1 represent!
2 represent!
3 represent!
4 represent!
[<Process(Process-1, stopped)>, <Process(Process-2, stopped)>, <Process(Process-3, stopped)>, <Process(Process-4, stopped)>, <Process(Process-5, stopped)>]
io non riesco a trovare l'attributo rilevante gli oggetti memorizzati in jobs
.
Grazie in anticipo, BLZ
Ti consiglio di utilizzare una (https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue), piuttosto che un 'manager [multiprocessing.Queue''] 'qui. L'uso di un 'Manager' richiede di generare un processo completamente nuovo, che è eccessivo quando un' Queue' farebbe. – dano
@dano: Mi chiedo, se utilizziamo l'oggetto Queue(), non possiamo garantire l'ordine quando ogni processo restituisce il valore. Voglio dire se abbiamo bisogno dell'ordine nel risultato, per fare il prossimo lavoro. Come possiamo sapere esattamente da quale output proviene il processo – Catbuilts
@Catbuilts Puoi restituire una tupla da ciascun processo, in cui un valore è il valore di ritorno effettivo a cui tieni, e l'altro è un identificatore univoco dal processo. Ma mi chiedo anche perché è necessario sapere quale processo sta restituendo quale valore. Se questo è ciò che devi sapere sul processo, o hai bisogno di correlare tra il tuo elenco di input e l'elenco di output? In tal caso, consiglierei di usare 'multiprocessing.Pool.map' per elaborare il tuo elenco di oggetti di lavoro. – dano