繁体   English   中英

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

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

multiprocessing是必须的!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM