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))
无论哪种方式,您都可能需要评估执行从外部缓存检索的代码的潜在安全风险。
我尝试将编译后的对象添加到经常使用的 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))
无论哪种方式,您都可能需要评估执行从外部缓存检索的代码的潜在安全风险。