python 文件緩存

在給我司寫一個環(huán)境資源大戶統(tǒng)計的腳本。遇到的一個問題是nova,cinder這種服務(wù)里面存的都是租戶的tenant id。一串uuid,沒法對應(yīng)到人。

這倒是也好辦,keystone里面有個接口可以查出對應(yīng)tenant id的的tenant name。但是每次統(tǒng)計完都去查一遍keystone調(diào)起碼幾百次不是特傻(而且慢)。租戶id和名字這個映射屬于基本上都不會改的,應(yīng)該緩存起來。

既然是腳本,那么就緩存到文件中好了。google一下,有個現(xiàn)成的輪子。

# 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

然后,有了這個裝飾器之后,在需要緩存的函數(shù)前面加一下即可。如下:

@persist_to_file('cache.dat')
def tenantid_to_tenant_name(tenantid):
    headers = {'X-Auth-Token': TOKEN}

    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

如果已經(jīng)緩存在文件中了,那就直接讀文件;如果沒讀到,就去查一下,然后插到文件里。
超級方便有木有??!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個操作系統(tǒng),...
    sgt_tiger閱讀 13,242評論 4 72
  • 注: 所有命令都要切換到 root 用戶下執(zhí)行,通過 sudo su 命令可切換到 root 用戶 ,這樣就不需要...
    余帶鹽閱讀 2,475評論 0 4
  • 1.環(huán)境準備 centos7 1.1、yum安裝設(shè)置 yum list |grep openstackcentos...
    davisgao閱讀 5,689評論 1 16
  • 頁碼其實就是文件或文章的每一頁面上標明順序的號碼或其他數(shù)字,拿來統(tǒng)計書籍的面數(shù),便于讀者閱讀。所以不論是文件還是文...
    迅捷胡閱讀 5,291評論 0 0
  • 重云疊巘可容稽?急雨穿林霧靄低。 醉立此間常似夢,落花滿地不成蹊。 注:平水韻上平八齊,平起入韻。
    風居滄溟閱讀 693評論 0 1

友情鏈接更多精彩內(nèi)容