Многопроцессорная ошибка не определена

Я использую следующий тестовый код:

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
Другие вопросы по тегам