下面是一些玩具示例,用于重现我在Python 3.5上使用pathos.multiprocessing时遇到的问题。一个问题是并行流程无法识别Test
是什么,即使在Test
内未使用test()
也是如此。我已经看到一些帖子解决了第二个问题,我在import numpy as np
函数中需要test
,但这对我不起作用。
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)
我得到的错误是:_pickle.PicklingError: Can't pickle <enum 'TestEnum'>: it's not found as builtins.TestEnum
如果我要删除所有出现的TestEnum
,那么下一个错误就是np
无法识别。我在此网站上看到了其他帖子,建议import numpy as np
顶部需要main()
,但这对我不起作用。我尝试在main()
中导入模块时遇到的错误是:ImportError: __import__ not found
答案 0 :(得分:1)
问题:如果我添加一个入口点并通过它调用main()
这是multiprocessing
的必填项!
Python»3.6文档Section: Safe importing of main module
安全导入主模块
确保新的Python解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程)。应该使用
来保护程序的“切入点”if __name__ == '__main__':