Eventuali duplicati:
Python multiprocessing global variable updates not returned to parentvariabili Globals e Python multiprocessing
sto usando un computer con molti core e per i vantaggi di prestazioni in realtà dovrebbe usare più di uno. Tuttavia, sono confuso perché questi pezzi di codice non fanno quello che mi aspetto:
from multiprocessing import Process
var = range(5)
def test_func(i):
global var
var[i] += 1
if __name__ == '__main__':
jobs = []
for i in xrange(5):
p = Process(target=test_func,args=(i,))
jobs.append(p)
p.start()
print var
Così come
from multiprocessing import Pool
var = range(5)
def test_func(i):
global var
var[i] += 1
if __name__ == '__main__':
p = Pool()
for i in xrange(5):
p.apply_async(test_func,[i])
print var
mi aspetto che il risultato sia [1, 2, 3, 4, 5]
ma il risultato è [0, 1, 2, 3, 4]
.
Ci deve essere qualche sottigliezza che mi manca nell'usare le variabili globali con i processi. E 'questa anche la strada da percorrere o dovrei evitare di provare a cambiare una variabile in questo modo?
Guardate questa domanda http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide
sono in esecuzione questi frammenti di codice da uno script o eseguito all'interno di una console Python? –
È necessario gestire l'elenco con un gestore di multiprocessing. – mgilson