Обработка исключений декоратора 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 не имеет возможности отключить исключение в существующих функциях.

Вы можете унаследовать класс, в котором происходит обработка исключений, и переопределить этот метод.

За исключением, есть способ, но он включает в себя отслеживание, и вы должны быть осторожны.

Другие вопросы по тегам