使用面向对象代码进行多重处理:解决无法 Pickle 错误
在多重处理中,了解对象的可腌制性至关重要在进程之间有效地分配工作。然而,绑定方法带来了挑战,因为它们本质上不是可腌制的,会导致错误“无法腌制
要解决此问题,一种方法是注册使用 copy_reg 模块自定义酸洗/取消酸洗功能。这使我们能够定义如何对绑定方法进行 pickle 和 unpickled。
Steven Bethard 的有用贡献中概述了一种执行此操作的方法。下面是一个如何实现的示例:
import copy_reg def reduce_method(m): return (getattr, (m.__self__, m.__func__.__name__)) copy_reg.pickle(type(lambda x: x), reduce_method)
通过使用 copy_reg 注册此方法,绑定方法可以在 pickling 期间转换为 (getattr, (object, method_name)) 形式的元组。然后,该元组可用于在 unpickle 期间重建接收端的方法。
通过采用此技术,可以在多处理中使用绑定方法,而不会遇到“无法 pickle”错误。这允许采用更灵活和面向对象的方法在多个进程之间分配工作,从而实现更高效和可扩展的代码执行。
以上是如何解决面向对象多重处理中的'Can't Pickle”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!