多处理numpy未定义错误

Zan*_*nam 5 python numpy multiprocessing pathos

我正在使用以下测试代码:

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])
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

File "C:\Python27\lib\site-packages\multiprocess\pool.py", line 567, in get
    raise self._value
NameError: global name 'numpy' is not defined
Run Code Online (Sandbox Code Playgroud)

我在代码中做错了什么?

编辑:为什么这个问题被否决了两次?

我已经安装了 numpy 并且我的解释器一直在正确使用它,直到我尝试将其用于多处理。我已经用相同的安装编码了一段时间。

MSe*_*ert 4

似乎导入不在进程之间共享。因此,您需要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
Run Code Online (Sandbox Code Playgroud)