параллельная карта Python (multiprocessing.Pool.map) с глобальными данными

Я пытаюсь вызвать функцию для нескольких процессов. Очевидным решением является модуль 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)
12
задан mgilson 28 March 2012 в 16:53
поделиться