我有一个模块,它包装了一个 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 数据以及一些方便/方法来下载某些网址。我可以实例化下载器类,但是我必须将实例显式传递给每个函数,或者使用另一个全局变量来获得该类的便利版本。下载器类还跟踪请求数(网站每分钟/小时有限制),因此拥有多个下载器对象会导致更多麻烦。