0

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

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

但收到以下错误消息:

无法腌制 <class 'code' >:内置函数上的属性查找代码失败

有没有解决这个问题的方法或替代方法?

4

1 回答 1

0

您可以使用专为内部对象序列化设计的 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))

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

于 2019-05-25T01:53:48.183 回答