Quindi quello che sto cercando di fare in definitiva è leggere una riga, fare alcuni calcoli con le informazioni in quella linea, quindi aggiungere il risultato a qualche oggetto globale, ma non riesco mai a ottenerlo lavorare. Ad esempio, il test è sempre 0 nel codice qui sotto. So che questo è sbagliato, e ho provato a farlo in altri modi, ma non funziona ancora.modifica della variabile globale durante la multiprocessing in python
import multiprocessing as mp
File = 'HGDP_FinalReport_Forward.txt'
#short_file = open(File)
test = 0
def pro(temp_line):
global test
temp_line = temp_line.strip().split()
test = test + 1
return len(temp_line)
if __name__ == "__main__":
with open("HGDP_FinalReport_Forward.txt") as lines:
pool = mp.Pool(processes = 10)
t = pool.map(pro,lines.readlines())
Globals sono in genere un segno che si sta facendo qualcosa di sbagliato. Ti consiglio di cambiare il modo in cui il tuo programma funziona per evitarli, ma a lungo andare ti farà risparmiare grattacapi e c'è sempre un modo migliore. –
Il punto del modulo multiprocessing è che genera processi figlio anziché thread nello stesso processo, con tutti i soliti compromessi. Sfortunatamente, la documentazione non spiega affatto questi compromessi, presumendo che tu li conosca già. Se segui tutte le "Linee guida per la programmazione" nella documentazione, potresti non capire, ma dovresti davvero imparare. – abarnert