2012-06-26 25 views
12

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?

+0

Guardate questa domanda http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide

+0

sono in esecuzione questi frammenti di codice da uno script o eseguito all'interno di una console Python? –

+1

È necessario gestire l'elenco con un gestore di multiprocessing. – mgilson

risposta