初始化模块python
我有一个json api,用于查询歌曲封面/混音数据,并限制每小时/分钟的请求数。我希望保留json响应的可选缓存,而不必每次都强制用户调整缓存/上下文参数。在python中初始化库/模块的好方法是什么?或者您会建议我只做显式的事情,在最终请求json数据的每个调用中使用一个名为参数的缓存吗 我在考虑做什么初始化模块python,python,module,initialization,Python,Module,Initialization,我有一个json api,用于查询歌曲封面/混音数据,并限制每小时/分钟的请求数。我希望保留json响应的可选缓存,而不必每次都强制用户调整缓存/上下文参数。在python中初始化库/模块的好方法是什么?或者您会建议我只做显式的事情,在最终请求json数据的每个调用中使用一个名为参数的缓存吗 我在考虑做什么 _cache = None class LFU(object): ... NO_CACHE, LFU = "NO_CACHE", "LFU" def set_cache_stra
_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()
编辑: 我可能只打算采用两种策略,一种是带缓存的策略,另一种是不带缓存的策略 我可以想到的其他可能的替代初始化方案包括使用环境变量、手动将用户代码中的_cache初始化为None/LFU(),以及在任何地方使用显式缓存(可能默认为具有缓存)
请注意,我没有在类的实例上设置缓存的原因是,我目前使用从未实例化的类(使用类函数+类状态作为单例)来抽象下载json数据,并使用一些方便/方法来下载某些URL。我可以实例化downloader类,但是我必须将实例显式地传递给每个函数,或者使用另一个全局变量来实现该类的方便版本。downloader类还跟踪请求的数量(网站有每分钟/小时的限制),因此有多个downloader对象会带来更多麻烦。设置默认值没有错,即使默认值是
无。但我要指出的是,拥有伪常量和条件(前提是您只使用这些值)是多余的。尝试:
caching_strategies = {'NO_CACHE' : lambda: None,
'LFU' : LFU}
_cache = caching_strategies['NO_CACHE']
def set_cache_strategy(strategy):
_cache = caching_methods[strategy]()
如果您想为可用的策略提供一种方便的方法,只需包装caching\u strategies.keys()
。实际上,就你的策略而言,你应该让你所有的策略都继承一些基本策略,只需创建一个no_cache strategy类,该类继承该类,并为标准化缓存接口存根所有方法。为什么不在类的实例上而不是在模块上配置缓存策略?
caching_strategies = {'NO_CACHE' : lambda: None,
'LFU' : LFU}
_cache = caching_strategies['NO_CACHE']
def set_cache_strategy(strategy):
_cache = caching_methods[strategy]()