Duplicata possible:
Les mises à jour des variables globales de multi-traitement Python ne sont pas retournées au parent
J'utilise un ordinateur avec de nombreux cœurs et pour des performances optimales, je devrais vraiment en utiliser plusieurs. Cependant, je ne comprends pas pourquoi ces morceaux de code ne font pas ce que j'attends:
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
Aussi bien que
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
Je m'attends à ce que le résultat soit [1, 2, 3, 4, 5]
mais le résultat est [0, 1, 2, 3, 4]
.
Il doit y avoir une subtilité qui me manque dans l'utilisation des variables globales avec les processus. Est-ce même la voie à suivre ou dois-je éviter d'essayer de modifier une variable de cette manière?
Si vous exécutez deux processus distincts, ils ne partageront pas les mêmes globaux. Si vous souhaitez transmettre les données entre les processus, regardez à l'aide de send et recv. Jetez un œil à http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes pour un exemple similaire à ce que vous faites.