Ho letto di Python multiprocessing module. Continuo a non pensare di avere una buona comprensione di cosa può fare.Python: elaborazione multicore?
Diciamo che ho un processore quadcore e ho una lista con 1.000.000 di interi e voglio la somma di tutti gli interi. Potrei semplicemente fare:
list_sum = sum(my_list)
Ma questo lo invia solo ad un nucleo.
E 'possibile, utilizzando il modulo multiprocessing, dividere l'array e fare in modo che ogni core ottenga la somma della sua parte e restituisca il valore in modo che la somma totale possa essere calcolata?
Qualcosa di simile:
core1_sum = sum(my_list[0:500000]) #goes to core 1
core2_sum = sum(my_list[500001:1000000]) #goes to core 2
all_core_sum = core1_sum + core2_sum #core 3 does final computation
Qualsiasi aiuto sarebbe apprezzato.
@ Martin, credo che questo deadlock, per http://docs.python.org/library/multiprocessing.html#multiprocessing-programming: "un processo che ha messo gli elementi in un la coda aspetterà prima di terminare finché tutti gli elementi memorizzati nel buffer non saranno alimentati dal thread "feeder" alla pipe sottostante "- l'esempio di deadlock che i documenti danno è molto simile al tuo codice (è un singolo sottoprocesso all'inizio, join, get sequenza) e due sottoprocessi invece di uno non aiutano. Scambia i join e ottiene, o semplicemente rimuovi i join. –
"Ha funzionato per me", probabilmente perché i dati si inseriscono semplicemente nel tubo. In ogni caso, ho rimosso i join. –
Lo stai facendo su Linux? – Nope