0

下面是一些玩具示例,用于重现我在 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在顶部需要an main(),但这对我不起作用。当我尝试在其中导入模块时遇到的错误main()是:ImportError: __import__ not found

4

1 回答 1

1

问题:如果我添加一个入口点并通过它调用 main()

这是强制性的multiprocessing

Python » 3.6 文档部分:安全导入主模块

主模块的安全导入
确保主模块可以被新的 Python 解释器安全地导入,而不会导致意外的副作用(例如启动新进程)。

应该通过使用来保护程序的“入口点”if __name__ == '__main__':

于 2017-06-26T19:40:08.117 回答