多处理 numpy 未定义错误

Posted

技术标签:

【中文标题】多处理 numpy 未定义错误【英文标题】:multiprocessing numpy not defined error 【发布时间】:2016-12-11 01:45:53 【问题描述】:

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

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,并且我的解释器一直在正确使用它,直到我尝试将它用于多处理。一段时间以来,我一直在使用相同的安装进行编码。

【问题讨论】:

请确保您已安装 numpy。如果你的答案是肯定的:确保你已经为你实际使用的 Python 安装了它。如果您的回答是肯定的:在您的foo 函数中尝试import numpy。我认为这个问题被否决了,因为如果你问到你的错误,谷歌会返回很多答案。 我不确定你是否看过我对评论的编辑。也许 pathos 不知道你导入了 numpy。也许你应该把import numpy 放在你的foo 函数中。 我该如何解决这个问题,因为我在现实生活中的例子我必须导入超过 10 个包,我不能在函数中这样做,或者这是唯一的方法吗? 在函数内部导入是否有效? 是的,当我在函数内部导入时它可以工作。 【参考方案1】:

似乎进程之间不共享导入。因此,您需要在所有流程中分别import 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

【讨论】:

以上是关于多处理 numpy 未定义错误的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用 numpy 数组的“未定义引用”错误

使用 numpy 和 gdal 的 Python C 扩展在运行时给出未定义的符号

如何修复“未处理的运行时错误类型错误:事件未定义”

未处理的拒绝(错误)reducer 返回未定义

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

*可能的未处理承诺拒绝(id:0):类型错误:未定义不是对象(评估'result.cancelled')云图像上传