如何使用莳萝库通过搁置库进行对象序列化



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

TypeError: can't pickle coroutine objects

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

我尝试用dill腌制协程,它奏效了。如何告诉shelve使用dill作为序列化后端?

我尝试shelve猴子补丁,但它不起作用(我不知道为什么(:

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

您可以保存带有收益的函数,但不能保存生成器。来自文档:"莳萝还不能腌制这些标准类型: 框架,生成器,回溯。

此代码有效(莳萝版本 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()

但是没有莳萝,我们会得到"类型错误:无法腌制省略号对象":

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

最新更新