无法使用 python pathos multiprocessing 腌制对象和导入模块

failing to pickle objects and import modules with python pathos multiprocessing

下面是一些玩具示例,用于重现我在 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)

我得到的错误是:_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

Question: If I add an entry point and call main() through it work

multiprocessing 必填!

Python » 3.6 Documentation Section: Safe importing of main module

Safe importing of main module
Make sure that the main module can be safely imported by a new Python interpreter without causing unintended side effects (such a starting a new process).

One should protect the “entry point” of the program by using if __name__ == '__main__':