首页 > 解决方案 > Python多处理导入类酸洗错误

问题描述

对于我正在处理的项目,我需要使用已编译文件中的类,并且我不明白使用多处理模块时遇到的错误。

我不断收到错误,因此我大大简化了我正在使用的内容,但我意识到即使是最简单的实现也会出现相同的错误。

我尝试运行以下代码:

from multiprocessing import Pool, cpu_count
from structures.target import Target



def get_lat(tar: Target)->float:
    return tar.x_coord  
    

if __name__ == "__main__":
    # create target_list of Target objects
    pool = Pool(cpu_count())
    lat_list = pool.map(get_lat, target_list)

从文件中导入目标类的位置

target.cpython-38-x86_64-linux-gnu.so

在运行脚本的目录中包含的结构目录中。

据我了解,传递给 pool.map 的所有内容都必须是可腌制的,我认为是这种情况,因为它们似乎是在低级别定义的。但是我仍然收到以下错误:

_pickle.PicklingError: Can't pickle <class 'compiled.structures.target.Target'>: import of module 'compiled.structures.target' failed

我不明白为什么导入编译文件失败,因为运行这个:

if __name__ == "__main__":
    # create target_list of Target objects
    l = [tar.x_coord for tar in target_list]

完美运行。任何帮助将非常感激。

标签: pythonpicklepython-multiprocessing.so

解决方案


推荐阅读