没有使用python pathos多处理来挑选对象和导入模块

时间:2017-06-26 02:16:34

标签: python multiprocessing python-multiprocessing pathos

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

1 个答案:

答案 0 :(得分:1)

  

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

这是multiprocessing的必填项!

  

Python»3.6文档Section: Safe importing of main module

     
    

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

         

应该使用if __name__ == '__main__':

来保护程序的“切入点”