Можно создать дубликат:
Python multiprocessing global variable updates not returned to parentGlobals переменные и Python многопроцессорной
Я использую компьютер с большим количеством ядер и преимущества в производительности я действительно использовать больше чем один. Тем не менее, я запутался, почему эти биты кода не делать то, что я ожидал:
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
Как
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
Я ожидаю, что результат будет [1, 2, 3, 4, 5]
но результат [0, 1, 2, 3, 4]
.
Должна быть какая-то тонкость, которую мне не хватает при использовании глобальных переменных с процессами. Это даже путь, или я должен избегать попытки изменить переменную таким образом?
Посмотрите на этот вопрос http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide
Вы используете эти фрагменты кода из сценарий или выполнение внутри консоли Python? –
Вы должны управлять своим списком с помощью диспетчера многопроцессорности. – mgilson