Проверьте, установлена ли переменная в 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")
или любой другой метод удаления, который есть в вашем кэше.