Ho un SciPy Array (Matrix) da 60 GB che devo condividere tra 5+ multiprocessing
Process
oggetti. Ho visto numpy-sharedmem e ho letto questa discussione nell'elenco SciPy. Sembra che ci siano due approaches-- numpy-sharedmem
e utilizzando una multiprocessing.RawArray()
e la mappatura NumPy dtype
s a ctype
s. Ora, numpy-sharedmem
sembra essere la strada da percorrere, ma devo ancora vedere un buon esempio di riferimento. Non ho bisogno di alcun tipo di blocco, poiché l'array (in realtà una matrice) sarà di sola lettura. Ora, a causa delle sue dimensioni, vorrei evitare una copia. E suona come il metodo corretto è quello di creare l' unica copia della matrice come un sharedmem
array, e poi passarlo agli Process
oggetti? Un paio di domande specifiche:
Qual è il modo migliore per passare effettivamente gli handle di sharedmem ai sottomessi
Process()
? Ho bisogno di una coda solo per passare un array? Sarebbe meglio una pipa? Posso semplicemente passarlo come argomentoProcess()
all'init della sottoclasse (dove presumo sia in salamoia)?Nella discussione che ho collegato sopra, si parla di
numpy-sharedmem
non essere sicuri a 64 bit? Sto sicuramente usando alcune strutture che non sono indirizzabili a 32 bit.Ci sono compromessi
RawArray()
nell'approccio? Più lento, più forte?Ho bisogno di una mappatura da ctype a dtype per il metodo numpy-sharedmem?
Qualcuno ha un esempio di codice OpenSource che lo fa? Sono un dotto molto pratico ed è difficile farlo funzionare senza alcun tipo di buon esempio da guardare.
Se ci sono informazioni aggiuntive che posso fornire per chiarire questo aspetto ad altri, ti preghiamo di commentare e aggiungerò. Grazie!
Questo deve essere eseguito su Ubuntu Linux e forse Mac OS, ma la portabilità non è una grande preoccupazione.
multiprocessing
di fare una copia dell'intera cosa per ogni processo.