Python: 将编译对象添加到 Memcached

Python: Add compiled object to Memcached

我尝试将编译后的对象添加到经常使用的 Memcached。编译后的对象永远不会改变。

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

但是得到如下错误信息:

Can't pickle < class 'code' >: attribute lookup code on builtins failed

这个问题有什么解决方案或替代方法吗?

您可以使用专为内部对象序列化设计的 marshal 模块

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))

无论哪种方式,您都可能需要评估执行从外部缓存检索的代码的潜在安全风险。