我正在使用以下测试代码:
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
分别在您的所有流程中。
在你的情况下,这意味着添加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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)