Python: добавление скомпилированного объекта в Memcached - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь добавить скомпилированный объект в Memcached, который регулярно используется.Скомпилированный объект никогда не изменяется.

cache.set(eq, compile(eq, '<string>', 'eval'), 365*24*60*60)

Но появляется следующее сообщение об ошибке:

Can't pickle : код поиска атрибута для встроенных команд не удался

Есть ли решение этой проблемы или альтернативный подход?

1 Ответ

0 голосов
/ 25 мая 2019

Вы можете использовать модуль маршала, специально предназначенный для сериализации внутренних объектов

cache.set(eq, marshal.dumps(compile(eq, '<string>', 'eval')), 365*24*60)
  ...
eval(marshal.loads(cache.get(eq)))

В качестве альтернативы вы можете сохранить источник

cache.set(eq, eq, 365*24*60)
   ...
eval(cache.get(eq))

В любом случае вам может понадобиться оценить потенциальные угрозы безопасности при выполнении кода, извлеченного из внешнего кэша.

...