依赖项缓存管理器
项目描述
CacheMan
管理依赖项缓存的Python接口。
‘Ba-Bop-Ba-Dop-Bop’
描述
此模块作为缓存依赖项管理器,适用于程序中有许多重复计算且可以安全持久化的实例。这通常涉及一个数据库层来存储键值对。然而,这样的层有时过于冗余,并且管理数据库与项目可能比它所值得的更多努力。这就是CacheMan发挥作用的地方,它通过一个接口提供定义保存器、加载器、构建器和依赖项的磁盘默认值。
默认情况下,所有缓存将在60秒内发生10k更改、300秒内发生10次更改(但在60秒后)或900秒内发生1次更改时自动保存。可以通过从autosync子模块实例化AutoSyncCache来更改此行为。
依赖项
psutil – 用于异步缓存保存
功能
本地内存字典的即插即用替换
默认持久化pickle缓存
非持久化缓存
缓存加载/保存/删除钩子(默认)
缓存验证钩子
缓存构建器钩子
依赖项无效化
自动同步缓存
如何使用
以下是一些使用存储库的简单示例。
设置简单的持久化缓存
from cacheman import cacher manager = cacher.get_cache_manager() # Optional manager name argument can be used here cache = manager.register_cache('my_simple_cache') # You now have a cache! print cache.get('my_key') # `None` first run, 'my_value' if this code was executed earlier cache['my_key'] = 'my_value' cache.save() # Changes are now persisted to disk manager.save_cache_contents('my_simple_cache') # Alternative way to save a cache
非持久化缓存
from cacheman import cacher manager = cacher.get_cache_manager() cache = manager.register_custom_cache('my_simple_cache', persistent=False) # You cache won't save to disk cache.save() # This is a no-op
注册钩子
from cacheman import cacher from cacheman import cachewrap def my_saver(cache_name, contents): print("Save requested on {} cache content: {}".format(cache_name, contents)) def my_loader(cache_name): return { 'load': 'faked' } manager = cacher.get_cache_manager() cache = cachewrap.PersistentCache('my_cache', saver=my_saver, loader=my_loader) # Can also use manager to set savers/loaders #manager.retrieve_cache('my_cache') #manager.register_saver('my_cache', my_saver) #manager.register_loader('my_cache', my_loader) cache.save() # Will print 'Save ... : { 'load': 'faked' }' cache['new'] = 'real' # Add something to the cache cache.save() # Will print 'Save ... : { 'load': 'faked', 'new': 'real' }'
依赖项缓存
from cacheman import cacher manager = cacher.get_cache_manager() edge_cache = manager.retrieve_cache('edge_cache') root_cache = manager.register_cache('root_cache') manager.register_dependent_cache('root_cache', 'edge_cache') def set_processed_value(): # Computes and caches 'processed' from root's 'raw' value processed = edge_cache.get('processed') if processed is None: processed = (root_cache.get('raw') or 0) * 5 edge_cache['processed'] = processed return processed # A common problem with caching computed or dependent values: print set_processed_value() # 0 without raw value root_cache['raw'] = 1 print set_processed_value() # still 0 because it's cache in edge # Now we use cache invalidation to tell downstream caches they're no longer valid root_cache.invalidate() # Invalidates dependent caches print edge_cache # Prints {} even though we only invalidated the root_cache root_cache['raw'] = 1 print set_processed_value() # Now 5 because the edge was cleared before the request print edge_cache # Can see {'processed': 5} propogated
设置缓存目录
from cacheman import cacher # Default cache directory is '/tmp/general_cacher' or 'user\appadata\local\temp\general_cache' # All pickle caches now save to namespaced directories within the base_cache_directory directory manager = cacher.get_cache_manager(base_cache_directory='secret/cache/location') cache = manager.register_cache('my_cache') cache['new'] = 'real' # Add something to the cache cache.save('my_cache') # Will save contents to 'secret/cache/location/general_cache/my_cache.pkl'
语言偏好
Google 风格指南
面向对象(少数例外)
待办事项
更好的参数检查
变更日志
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
此版本没有提供源代码分发文件。请参阅生成分发存档的教程。
构建分发
CacheMan-2.2.0-py2.py3-none-any.whl (13.2 kB 查看哈希值)
关闭
CacheMan-2.2.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d41529ac09dfe34eec388def50fdba64bec83ce1c2325ed9eddc4ffc6e664add |
|
MD5 | 0f467ea4610d3ee048dedba42224ffb4 |
|
BLAKE2b-256 | bbb13a64d6731e72e0d82964214d26ec312f76c016ef74cbb43ea289d609b7b0 |