无法使用python Paths多处理来pickle对象和导入模块
下面是一些玩具示例,它们再现了我在Python 3.5上遇到的pathos.multiprocessing问题。一个问题是并行过程无法识别什么是无法使用python Paths多处理来pickle对象和导入模块,python,multiprocessing,python-multiprocessing,pathos,Python,Multiprocessing,Python Multiprocessing,Pathos,下面是一些玩具示例,它们再现了我在Python 3.5上遇到的pathos.multiprocessing问题。一个问题是并行过程无法识别什么是Test,即使Test中没有使用Test()。我看到一些帖子提到了第二个问题,说我需要在test函数中使用import numpy as np,但这对我不起作用 import numpy as np from enum import Enum from pathos.multiprocessing import ProcessingPool clas
Test
,即使Test
中没有使用Test()
。我看到一些帖子提到了第二个问题,说我需要在test
函数中使用import numpy as np
,但这对我不起作用
import numpy as np
from enum import Enum
from pathos.multiprocessing import ProcessingPool
class TestEnum(Enum):
A = 1
B = 2
def test(x):
if x >= 0:
return np.array(TestEnum.A)
else:
return np.array(TestEnum.B)
def main():
inputs = np.arange(100)
pool = ProcessingPool()
outputs = pool.map(test, inputs)
我得到的错误是:\u pickle.PicklingError:无法pickle:未将其作为内置项找到。TestEnum
如果我要清除所有出现的TestEnum
,那么下一个错误将是np
无法识别。我在这个网站上看到其他帖子,建议在main()
的顶部需要一个importnumpyasnp
,但这对我不起作用。尝试导入main()中的模块时出现的错误是:ImportError:\uu导入\uu未找到
问题:如果我添加了一个入口点并通过它调用main(),则可以工作
对于多处理
,它是必需的
Python»3.6文档
安全导入主模块
确保新的Python解释器可以安全地导入主模块,而不会产生意外的副作用(例如启动新进程)
如果uuu name uuuu=='uuuu main uuu':
无法使用
pathos
,使用multiprocessing.Pool()
进行测试。Pool()可以正常工作。@当我尝试使用multiprocessing.Pool
运行时,stovfl会出现以下错误:\u pickle.pickle错误:无法pickle:main上的属性查找测试失败
如何调用main()
,我假设您没有if\uuuu name\uuuu='\uuu main\uuuu':
入口点。@stovfl很好-我一直在通过IDE逐行执行来测试这一点。如果我添加一个入口点并通过它调用main()
,它将与multiprocessing.Pool
一起工作。你知道为什么一行一行地执行是行不通的吗?