我在用着PyMemoize
缓存协程的库。我装饰了协程,但是当 Python 调用它时,我得到:
TypeError: can't pickle coroutine objects
发生这种情况是因为PyMemoize
内部尝试腌制协程并将其存储在 Redis 中。为此,它使用shelve.Shelf
,这又使用pickle
。问题是,由于未知的原因,pickle
不支持pickling协程。
我尝试用以下方法来腌制协程dill
它起作用了。我怎么告诉shelve
to use 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()
但是如果没有 dill,我们会得到“TypeError:无法腌制省略号对象”:
import shelve
d=shelve.open("shelve.dat")
d['1']=Ellipsis
d.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)