您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python多处理池映射:AttributeError:无法腌制本地对象

Python多处理池映射:AttributeError:无法腌制本地对象

AttributeError:无法腌制本地对象“ SomeClass.some_method..single”

您可以通过将嵌套的目标函数single()移到顶层来自己解决错误

Pool需要对其发送到其工作进程(IPC)的所有内容进行腌制(序列化)。酸洗实际上仅保存函数名称,而酸洗则需要按名称重新导入该函数。为此,必须在顶层定义函数,子级将不能导入嵌套函数,并且已经尝试将其腌制会引发异常。

AttributeError:无法从“ … / test.py”获取模块“ main”上的属性“ single”

定义函数和类 之前 先启动池,这样子进程就不能继承任何代码。将您的池启动到最底部并用以下方法保护(为什么?if __name__ == '__main__':

import multiprocessing

class OtherClass:
  def run(self, sentence, graph):
    return False


def single(params):
    other = OtherClass()
    sentences, graph = params
    return [other.run(sentence, graph) for sentence in sentences]

class SomeClass:
   def __init__(self):
       self.sentences = [["Some string"]]
       self.graphs = ["string"]

   def some_method(self):
      return list(pool.map(single, zip(self.sentences, self.graphs)))

if __name__ == '__main__':  # <- prevent RuntimeError for 'spawn'
    # and 'forkserver' start_methods
    with multiprocessing.Pool(multiprocessing.cpu_count() - 1) as pool:
        print(SomeClass().some_method())

…我希望将工作分散到我的所有核心。

有关multiprocessing.Pool分块工作方式的潜在帮助背景:

Python多处理:了解块大小背后的逻辑

python 2022/1/1 18:48:55 有346人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶