簡體   English   中英

初始化模塊python

[英]Initialize module python

我有一個模塊 ,其中包裝了一個json api,用於查詢歌曲封面/混音數據,並具有每小時/分鍾的請求數限制。 我想保持的JSON響應可選緩存,而不強迫用戶每次調整緩存/上下文參數。 在python中初始化庫/模塊的好方法是什么? 或者你會建議我只是做了明確的事情,在每一個電話,最終請求JSON數據使用命名參數緩存?

我在想做

_cache = None

class LFU(object):
    ...

NO_CACHE, LFU = "NO_CACHE", "LFU"
def set_cache_strategy(strategy):
    if _cache == NO_CACHE:
        _cache = None
    else:
        _cache = LFU()

import second_hand_songs_wrapper as s
s.set_cache_strategy(s.LFU)
l1 = s.ShsLabel.get_from_resource_id(123)
l2 = s.ShsLabel.get_from_resource_id(123,use_cache=Fale)

編輯:我可能只打算有兩種策略,一種有/沒有緩存。

我想到的其他可能的替代初始化方案包括使用環境變量,將用戶代碼中的_cache手動初始化為None / LFU()以及在各處使用顯式緩存(可能默認為具有緩存)。

請注意,我沒有在類的實例上設置緩存的原因是,我當前使用的是永不實例化的類(將類函數+類狀態作為單例使用)來抽象下載json數據以及一些方便/方法來下載某些網址。 我可以實例化downloader類,但隨后必須將實例顯式傳遞給每個函數,或將另一個全局變量用於該類的便捷版本。 downloader類還跟蹤請求數(網站每分鍾/小時有限制),因此擁有多個downloader對象會造成更多麻煩。

設置默認值沒有什么問題,即使該默認值為None 我要指出的是,盡管具有偽常量和條件常量(只要您使用的是值)都是多余的。 嘗試:

caching_strategies = {'NO_CACHE' : lambda: None,
                      'LFU' : LFU}
_cache = caching_strategies['NO_CACHE']

def set_cache_strategy(strategy):
    _cache = caching_methods[strategy]()

如果要為可用策略提供方便的方法,只需包裝caching_strategies.keys() 確實,就您的策略而言,實際上,您應該使所有策略都從某個基本策略繼承而來,只是創建一個no_cache策略類,該類從該策略繼承而來,並為標准化緩存接口添加所有方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM