栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

错误1:

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

您可以通过将嵌套的目标函数

single()
移到顶层来自己解决此错误。

背景:

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


错误2:

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

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

if__name__ == '__main__':

import multiprocessingclass OtherClass:  def run(self, sentence, graph):    return Falsedef 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多处理:了解块大小背后的逻辑



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号