1

我正在使用 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
4

1 回答 1

1

但是,根据我从文档中了解到的情况,我没有使用 dogpile 的经验,当缺少一个值时,dogpile 通常会返回 的特定实例dogpile.cache.api.NoValue,即NO_CACHE.

这里的问题可能与您将缓存键显式设置为 相关NO_CACHE,最终以某种方式为您留下了 2 个不同的NoValue类实例。

在我看来,这NO_CACHE并不是真的要用于取消设置密钥,我相信如果您实际使用.delete("fault_injector")或您的缓存包装器可用的任何删除方法,您的问题将得到解决。

于 2016-02-12T17:59:38.393 回答