以下是一些玩具示例,以重现我对python 3.5上的多次处理。一个问题是,即使在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
无法识别。我在此网站上看到了其他帖子,建议在main()
的顶部需要import numpy as np
,但这对我不起作用。我尝试在main()
内导入模块时遇到的错误是:ImportError: __import__ not found
问题:如果我添加一个入口点并通过IT调用Main((工作
multiprocessing
!
python»3.6文档部分:主模块的安全导入
主模块的安全导入
确保主模块可以由新的Python解释器安全地导入,而不会引起意外的副作用(例如开始新的过程(。应该使用
保护程序的"入口点"if __name__ == '__main__':