Sono nuovo in Python e ho iniziato a utilizzare un algoritmo genetico (GA) per eseguire una sorta di adattamento della curva. Per quel GA sto usando la (fantastica) libreria pyevolve (http://pyevolve.sourceforge.net/) che è in grado di ridurre enormemente il tempo di calcolo usando il multiprocessing.PYTHON Rendere la variabile globale accessibile da ogni processo
Ecco dove si verifica il mio problema: la curva che voglio approssimare è una matrice che viene letta da un file excel e memorizzata come variabile globale all'inizio del mio programma. Quando si utilizza il modulo multiprocessing python, ogni processo crea la propria istanza di python con la propria variabile globale. Ciò fa sì che ogni individuo, in ogni generazione dell'algoritmo (ovvero ogni processo) apra e legga il file excel ancora e ancora. L'apertura di file excel di grandi dimensioni può causare un'enorme quantità di tempo, quindi sarebbe bello dover aprire quel file una sola volta e rendere l'array di lettura disponibile per ogni processo/individuo.
Il multiprocessing viene avviato nella libreria pyevolve e non desidero modificarlo per semplificare l'aggiornamento. Sfortunatamente ciò significa semplicemente passare la variabile al pool di processi tramite ad es.
p = Process(target=my_func,args=(my_array))
non è un'opzione per me. Questa è l'unica soluzione che ho trovato finora.
Qualcuno sa un altro modo per rendere my_array accessibile da ogni processo?
Grazie in anticipo!
Forse è possibile trovare una soluzione adeguata lì: https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes –