在給我司寫乙個環境資源大戶統計的指令碼。遇到的乙個問題是nova,cinder這種服務裡面存的都是租戶的tenant id。一串uuid,沒法對應到人。
這倒是也好辦,keystone裡面有個介面可以查出對應tenant id的的tenant name。但是每次統計完都去查一遍keystone調起碼幾百次不是特傻(而且慢)。租戶id和名字這個對映屬於基本上都不會改的,應該快取起來。
既然是指令碼,那麼就快取到檔案中好了。google一下,有個現成的輪子。
# cache, use json to store cache
def persist_to_file(file_name):
def decorator(original_func):
try:
cache = json.load(open(file_name, 'r'))
except (ioerror, valueerror):
cache = {}
def new_func(param):
if param not in cache:
cache[param] = original_func(param)
json.dump(cache, open(file_name, 'w'), indent=4)
return cache[param]
return new_func
return decorator
然後,有了這個裝飾器之後,在需要快取的函式前面加一下即可。如下:
@persist_to_file('cache.dat')
def tenantid_to_tenant_name(tenantid):
headers =
r = requests.get(
"{}:35357/v2.0/tenants/{}".format(ha, tenantid),
headers=headers)
result_json = json.loads(r.text)
name = result_json['tenant']['name']
return name
如果已經快取在檔案中了,那就直接讀檔案;如果沒讀到,就去查一下,然後插到檔案裡。
超級方便有木有!!
原文:
python實現快取 Python實現快取
注意 本文是乙個存根。稍會將發布有關不同的簡單快取實現的更詳細分析。請參閱下面的註解獲得大致的摘要。簡單快取實現 用法 注意,該實現使用普通列表來跟蹤訪問順序,以便能夠在快取填滿時丟棄最近最少使用的專案。列表型別沒有真正為此目的而優化,但是這種方法對於較小的快取非常有效,特別是當快取訪問遵循80 2...
python實現快取 Python實現快取
注意 本文是乙個存根。稍會將發布有關不同的簡單快取實現的更詳細分析。請參閱下面的註解獲得大致的摘要。簡單快取實現 用法 注意,該實現使用普通列表來跟蹤訪問順序,以便能夠在快取填滿時丟棄最近最少使用的專案。列表型別沒有真正為此目的而優化,但是這種方法對於較小的快取非常有效,特別是當快取訪問遵循80 2...
檔案快取原理
3,效能分析 快取之所以能提高效能,是通過本地磁碟空間換網路訪問速度和資料庫伺服器訪問時間的結果。a 本機讀寫時間 b 本機占用空間 c 網路傳輸時間 d 資料庫伺服器磁碟時間 可以估算到,如果資料庫與應用程式存在於一台機器時,主要是 a 與 d 的比較,效果可能並不明顯,甚至還要糟一點。因為資料庫...