曲のカバー/リミックス データをクエリするための json API をラップするモジュールがあり、1 時間/1 分あたりのリクエスト数に制限があります。ユーザーが毎回キャッシュ/コンテキストパラメーターを調整することを強制せずに、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)
編集:おそらく、キャッシュあり/なしの2つの戦略のみを計画しています。
頭のてっぺんに思いつく他の代替初期化スキームには、環境変数の使用、ユーザーコードで_cacheを手動でNone / LFU()に初期化する、明示的なキャッシュをどこでも使用する(おそらくデフォルトでキャッシュを使用する)などがあります。
クラスのインスタンスにキャッシュを設定しない理由は、現在、インスタンス化されていないクラス (クラス関数 + クラス状態をシングルトンとして使用) を使用して、特定のものをダウンロードするためのいくつかの利便性/メソッドと共に json データのダウンロードを抽象化するためです。 URL。ダウンローダ クラスをインスタンス化することはできますが、インスタンスを各関数に明示的に渡すか、別のグローバル変数をクラスの便利なバージョンに使用する必要があります。また、ダウンローダ クラスはリクエスト数を追跡します (Web サイトには 1 分/時間あたりの制限があります)。そのため、複数のダウンローダ オブジェクトがあると、より多くの問題が発生します。