首页 >后端开发 >Python教程 >为什么我无法在多处理中 Pickle 我的函数?

为什么我无法在多处理中 Pickle 我的函数?

Linda Hamilton
Linda Hamilton原创
2024-12-09 22:28:14834浏览

Why Can't I Pickle My Function in Multiprocessing?

多重处理错误:“无法 Pickle ”:揭示问题

您的代码遇到“ PicklingError:无法 pickle ":属性查找 __builtin__.function失败。”当尝试使用多处理异步应用函数时。出现此错误是因为正在腌制的函数未在模块的顶层定义。

了解 Pickling 层次结构

Python 的 pickling 机制可以将对象序列化为字节流以便稍后反序列化,但是并非所有对象都可以 pickled。值得注意的是,只有在模块顶层定义的函数才是可pickle的,这是因为pickle函数需要访问函数的全局变量,而在另一个函数或类中定义时则不可用。

您的代码情况

虽然您的函数是在顶层定义的,但它调用的其他函数可能不是顶层定义。会产生递归依赖,导致无法对顶层函数进行 pickle。

解决方案:移动函数定义

解决问题的关键是确保您尝试 pickle 的函数是在模块的顶层定义的。如有必要,请将函数的定义移至任何类或其他函数之外。

这是一个示例:

# Original code
class Foo:
    @staticmethod
    def work(self):
        pass

# Updated code
def work(foo):
    foo.work()

总结

通过了解酸洗过程及其局限性,您可以避免与功能酸洗相关的错误。请记住在模块的顶层定义函数,以确保在使用多处理时成功对其进行酸洗。

以上是为什么我无法在多处理中 Pickle 我的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn