首页 > 后端开发 > Python教程 > 如何解决Python多处理的'PicklingError: Can't pickle”?

如何解决Python多处理的'PicklingError: Can't pickle”?

DDD
发布: 2024-12-15 08:24:10
原创
884 人浏览过

How to Solve Python Multiprocessing's

Python 多处理中的 PicklingError

使用 Python 多处理时,可能会遇到“PicklingError: Can't pickle :属性查找 __builtin__.function 失败”错误。当您尝试将函数发送到工作进程,但该函数未在模块的顶层定义时,就会发生这种情况。

嵌套函数问题

中根据您的具体情况,错误可能是由您正在酸洗的函数调用嵌套函数引起的。即使外部函数 f() 是在顶层定义的,如果它调用包含嵌套函数 h() 的函数 g(),多重处理将尝试 pickle 嵌套函数并失败。

解决方案

要解决此问题,请将您想要 pickle 的函数移动到模块的顶层。或者,您可以在顶层创建一个单独的函数来调用嵌套函数并腌制该函数。

例如:

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
登录后复制

通过在顶层定义wrapper_function()然后对其进行酸洗,可以避免酸洗错误。

附加注意事项

  • 不支持pickle lambda 函数和函数指针。
  • 无法pickle 访问不可picklable 对象(例如文件句柄或数据库连接)的函数。
  • 如果您打算在模块中使用函数,那么在模块的顶层定义函数通常是一个很好的做法多处理。

以上是如何解决Python多处理的'PicklingError: Can't pickle”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板