2016-02-12 123 views
1

我正在使用dogpile在我的python程序中擁有緩存。 在我的程序的初始化,我清理緩存SimpleCache.set_fault_injector(NO_VALUE)檢查變量是否設置爲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網站的經驗,從我從文檔瞭解,當值是缺少那麼Dogpile網站通常返回的dogpile.cache.api.NoValue一個具體的實例,這是NO_CACHE

這裏的問題可能與您明確地設置緩存鍵爲NO_CACHE有關,後者以某種方式最終會讓您留下2個不同的NoValue類實例。

在我看來,NO_CACHE並不是真的用於取消設置密鑰,我相信如果您實際使用.delete("fault_injector")或緩存包裝器可用的任何移除方法,您的問題將得到解決。

+0

是的,它使用'.delete(「fault_injector」) – xeon123