Обработка исключений декоратора dogpile.cache
Я использую dogpile.cache в проекте Python с бэкэндом на основе pylibmc. После создания региона я использую что-то вроде:
@region.cache_on_arguments()
def run_some_query(**kwargs):
# ... Query code ...
return query_results
Моя проблема в том, что есть определенные исключения, которые выдает декоратор, которые я просто хотел бы игнорировать. Например, если memcached недоступен или если результат слишком велик.
Есть ли способ добиться этого без использования собственного декоратора? И если мне нужно создать собственный декоратор, какой хороший способ добиться этого.
1 ответ
Мне удалось решить эту проблему. Как оказалось, решение все-таки было в документации dogpile.cache, и я его пропустил. Решение можно найти в разделе " Изменение поведения серверной части" документации. Идея проста: создайте бэкэнд прокси, как описано в документации, а затем используйте параметр wrap при настройке региона для включения этого бэкенда прокси.
Декораторы - это просто функции. Так что вам нужно будет изменить функции. Python не имеет возможности отключить исключение в существующих функциях.
Вы можете унаследовать класс, в котором происходит обработка исключений, и переопределить этот метод.
За исключением, есть способ, но он включает в себя отслеживание, и вы должны быть осторожны.