Проверьте, установлена ​​ли переменная в NO_VALUE

Я использую dogpile, чтобы иметь кеш в моей программе на python. Во время инициализации моей программы я очищаю кеш SimpleCache.set_fault_injector(NO_VALUE)

@staticmethod
def set_fault_injector(injector):
    SimpleCache.save("fault_injector", injector)

Затем я получаю объект с помощью:

@staticmethod
def get_fault_injector():
    return SimpleCache.get("fault_injector")

injector = get_fault_injector()

Здесь, в моем тесте, я проверяю, injector переменная установлена ​​в NO_VALUE, но сравнение возвращается False (так должно быть TRUE). Как я могу проверить, если injector установлен в NO_VALUE? Способ, которым я очищаю кеш, правильный?

In [3]: injector
Out[3]: <dogpile.cache.api.NoValue at 0x7fdde0dfd750>

In [4]: NO_VALUE
Out[4]: <dogpile.cache.api.NoValue at 0x7fdde16dbed0>

In [5]: injector == NO_VALUE
Out[5]: False

In [6]: type(injector)
Out[6]: dogpile.cache.api.NoValue

In [7]: type(NO_VALUE)
Out[7]: dogpile.cache.api.NoValue

In [8]: injector is NO_VALUE
Out[8]: False

[9]: type(injector) == type(NO_VALUE)
Out[9]: True

1 ответ

Решение

Однако у меня нет опыта работы с собаками, из того, что я понимаю из документов: если значение отсутствует, то собака обычно возвращает конкретный экземпляр dogpile.cache.api.NoValue, который NO_CACHE,

Проблема здесь, вероятно, связана с тем, что вы явно устанавливаете ключ кэша в NO_CACHEчто в конечном итоге оставляет вас с 2 разными NoValue учебный класс.

Мне кажется, что NO_CACHE на самом деле не предназначен для использования для сброса ключа, я думаю, что ваша проблема будет решена, если вы действительно использовали .delete("fault_injector") или любой другой метод удаления, который есть в вашем кэше.

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