python - 多处理 numpy 未定义错误

标签 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])

它给出了错误:

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

我在代码中做错了什么?

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

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

最佳答案

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

关于python - 多处理 numpy 未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775754/

相关文章:

python - 如何将匹配索引与两个 Pandas 数据框合并

python - 使用 SQLAlchemy ORM 将新的一对多数据插入表中

python - 列表中最大的 n 个元素的项目和索引

python - 跨多维数组的矢量化 NumPy linspace

python - 如何在Python中的多个线程和进程之间有效地共享数据?

python - Django 模板条件检查

python - Opencv,如何覆盖图像?

python - 按值拆分为等份

python - 为什么 multiprocessing.Process.join() 挂起?

python - 调用 Client.Submit 时 Dask 出现 PicklingError