Многопроцессорная ошибка не определена
Я использую следующий тестовый код:
from pathos.multiprocessing import ProcessingPool as Pool
import numpy
def foo(obj1, obj2):
a = obj1**2
b = numpy.asarray(range(1,5))
return obj1, b
if __name__ == '__main__':
p = Pool(5)
res = p.map(foo, [1,2,3], [4,5,6])
Это дает ошибку:
File "C:\Python27\lib\site-packages\multiprocess\pool.py", line 567, in get
raise self._value
NameError: global name 'numpy' is not defined
Что я делаю не так в коде?
Изменить: почему этот вопрос был отклонен дважды?
Я установил numpy, и мой интерпретатор использовал его правильно, пока я не попытался сделать это для многопроцессорной обработки. Я кодирую с той же самой установкой некоторое время.
1 ответ
Кажется, что импорт не распределяется между процессами. Поэтому вам нужно import numpy
во всех ваших процессах по отдельности.
В вашем случае это означает добавление import numpy
в вашем foo
функция. Процессы не легкие, поэтому import
не будет замедлять вас (по крайней мере, незначительно).
Другой вариант - передать модуль в функции (не рекомендуется, и я не уверен, что это сработает):
if __name__ == '__main__':
p = Pool(5)
res = p.map(foo, numpy, [1,2,3], [4,5,6])
def foo(np, obj1, obj2):
a = obj1**2
b = np.asarray(range(1,5))
return obj1, b