处理dogpile.cache装饰器异常

时间:2019-06-13 09:08:01

标签: python caching dogpile.cache

我在一个带有基于pylibmc的后端的Python项目中使用dogpile.cache。创建区域后,我使用类似以下内容:

@region.cache_on_arguments()
def run_some_query(**kwargs):
    # ... Query code ...
    return query_results

我的问题是,装饰者提出了某些例外,我只想忽略这些例外。例如,如果memcached不可用,或者结果太大。

有没有一种方法可以实现而无需滚动自己的自定义装饰器?而且,如果我必须创建一个自定义装饰器,那么实现它的好方法是什么。

2 个答案:

答案 0 :(得分:0)

装饰器只是功能。因此,您需要更改功能。 Python无法在现有函数中禁用该异常。

您可以继承发生异常处理的类并覆盖此方法。

除了,有一种方法,但是它涉及跟踪,因此需要小心。

答案 1 :(得分:0)

我设法解决了这个问题。事实证明,解决方案毕竟是在dogpile.cache文档中,而我却错过了。该解决方案可以在文档的Changing Backend Behavior部分中找到。这个想法很简单:按照文档中的描述创建一个代理后端,然后在将区域配置为包括该代理后端时使用wrap参数。