Я пытаюсь вызвать функцию для нескольких процессов. Очевидным решением является модуль multiprocessingPython . Проблема в том, что функция имеет побочные эффекты. Он создает временный файл и регистрирует этот файл для удаления при выходе, используя
atexit.register
и глобальный список. Следующее должно продемонстрировать проблему (в другом контексте).
import multiprocessing as multi
glob_data=[]
def func(a):
glob_data.append(a)
map(func,range(10))
print glob_data #[0,1,2,3,4 ... , 9] Good.
p=multi.Pool(processes=8)
p.map(func,range(80))
print glob_data #[0,1,2,3,4, ... , 9] Bad, glob_data wasn't updated.
Есть ли способ обновить глобальные данные?
Обратите внимание: если вы попробуете вышеприведенный скрипт, вам, вероятно, не следует пробовать его из интерактивного интерпретатора, поскольку многопроцессорность
требует, чтобы модуль __main__
был импортируем дочерними процессами.
ОБНОВЛЕНИЕ
Добавлено ключевое слово global
в func not help -- например:
def func(a): #Still doesn't work.
global glob_data
glob_data.append(a)