Я использую библиотеку 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