Переменные Globals и многопроцессорность Python
Возможный дубликат:
Обновления глобальной переменной 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]
.
Должна быть какая-то тонкость, которую мне не хватает при использовании глобальных переменных с процессами. Это даже путь, или я должен избегать попытки изменить переменную таким образом?
Ответы
Ответ 1
Если вы используете два отдельных процесса, то они не будут использовать одни и те же глобальные переменные. Если вы хотите передать данные между процессами, посмотрите на использование send и recv. Посмотрите http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes на пример, похожий на то, что вы делаете.