无法使用python Paths多处理来pickle对象和导入模块

无法使用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

下面是一些玩具示例,它们再现了我在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

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
一起工作。你知道为什么一行一行地执行是行不通的吗?