我有一个module包装一个JSON API查询歌曲封面/混音数据与每小时/分钟的请求数限制。我想保留json响应的可选缓存,而不是每次都强制用户调整缓存/上下文参数。在python中初始化库/模块的好方法是什么?或者你会推荐我只是做明确的事情,并在最终请求json数据的每个调用中使用缓存命名参数?初始化模块python
我在想这样做
_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数据以及一些便利/方法来下载某些网址。我可以实例化下载器类,但是我必须将该实例显式地传递给每个函数,或者使用另一个全局变量作为该类的便利版本。下载者类也跟踪请求数量(网站每分钟/小时有限制),因此有多个下载器对象会导致更多麻烦。
为什么不在模块的实例上配置缓存策略? –