多进程Numpy未定义错误

6

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

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
请确保您已安装Numpy。如果是,请确保您已将其安装到实际使用的Python中。如果是,请尝试在您的“foo”函数中使用“import numpy”。我认为该问题被downvote是因为谷歌搜索您的错误会返回很多答案。 - MSeifert
2
我不确定你是否看到了我的评论编辑。也许pathos不知道你导入了numpy。也许你应该将“import numpy”放在你的“foo”函数内部。 - MSeifert
我该如何解决这个问题?因为对于我实际的例子,我必须导入超过10个包,而我不能在函数中这样做,难道这是唯一的方法吗? - Zanam
1
当你在函数内部导入它时,它能正常工作吗? - MSeifert
1
当我在函数内部进行导入时,它是有效的。 - Zanam
1个回答

4
似乎进程之间不共享导入。因此,您需要在所有进程中分别导入numpy。在您的情况下,这意味着在您的foo函数中添加import numpy。进程并不轻量级,因此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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接