gpt4 book ai didi

python - 如何使用 dill 库通过 shelve 库进行对象序列化

转载 作者:行者123 更新时间:2023-12-01 08:53:43 27 4
gpt4 key购买 nike

我正在使用 PyMemoize 库来缓存协程。我装饰了协程,但是当 Python 调用它时,我得到:

TypeError: can't pickle coroutine objects

发生这种情况是因为 PyMemoize 在内部尝试 pickle 协程并将其存储在 Redis 中。为此,它使用 shelve.Shelf,而后者又使用 pickle。问题是,出于未知原因,pickle 不支持 pickling 协程。

我尝试使用 dill 来 pickle 协程,并且成功了。如何告诉 shelve 使用 dill 作为序列化后端?

我尝试过猴子补丁搁置,但没有成功(我不知道为什么):

import shelve
from dill import Pickler, Unpickler
shelve.Pickler = Pickler
shelve.Unpickler = Unpickler

最佳答案

您可以保存带有 yield 的函数,但不能保存生成器。来自 documentation :“dill 还不能 pickle 这些标准类型:框架、生成器、回溯。”

此代码有效( dill 版本0.3.0):

import shelve
from dill import Pickler, Unpickler
shelve.Pickler = Pickler
shelve.Unpickler = Unpickler
d=shelve.open("shelve.dat")
d['1']=Ellipsis
d.close()

但是如果没有 dill,我们会得到“TypeError:无法 pickle 省略号对象”:

import shelve
d=shelve.open("shelve.dat")
d['1']=Ellipsis
d.close()

关于python - 如何使用 dill 库通过 shelve 库进行对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com