問題
今天在寫TurboGears網頁時,因為遇到用matplotlib產生的圖片
@expose_matplot_figure
def figure(self, id):
return dict(figure=pieFigure(id), dpi=75)
如果每次都重新產生一張新圖片,流量大時對主機是件很浪費資源的事情,理所當然第一個想到的就是cache,而cache要能知道有什麼東西改變了是否需要重新產生,而最好能夠不用為了每個exposed的頁面寫一個cache,因此最好的辦法就是用decorator來使用,可以丟函數進去來判斷是否是一樣的東西,是否需要重新產生等等,正當我要開始寫時…
解決方案
發現網路上已經有寫好的解決方案
A turbogears caching decorator
寫得很不錯,這樣一來我就可以直接cache我的圖片
def getFigureKey(self, id):
return id
def getFigureVersion(self, id):
wangea = Wangea.get(id)
return str([item.agree for item in wangea.items])
@expose()
@cache_result(key_fn=getFigureKey, version_fn=getFigureVersion)
@expose_matplot_figure
def figure(self, id):
return dict(figure=pieFigure(id), dpi=75)