只是一个简单的系统,用于管理一组支持缓存(内存和磁盘)的度量(字符串名称/函数/返回数据)

simple_metrics_manager的Python项目详细描述


简单的metrics manager有助于管理度量。

interfaces

"storageinterface"是一个类,它支持使用一些持久后端存储度量数据。当前的默认值是相当通用的".npz"格式
,用于存储numpy数组和简单的python对象"npzStorageInterface"。


为了防止数据损坏,它总是将数据保存到临时文件中,然后
将其移动到实际文件中(可能替换任何较旧的副本)。

它有一个简单的save/load/exists API。


torageinterface使用了numpy的"np.load"和(隐藏的)"savez"方法。
它进行了一些简单的检查,以允许保存数组、数组列表和数组字典。


这是非常快速、高效、可靠的,并且提供了相当大的灵活性。

llow_pickle=false`意味着保存对象数组将失败,
如果需要,请将其更改为'true',但pickle被认为是不稳定的,
因此对python或相关包版本的更改可能意味着您的数据不可读。不过,这是非常方便的,因此它并没有停止像scikit这样的大型软件包从中学习。


/>


使用'force=false')
*使用"side car"度量值对所有度量值进行日期确定(日期)
*打印所有主要操作(使用'verbose=false'禁用)



它具有以下API:

*`set_functions_dict'
-为管理器设置核心数据,这是一个实际上定义了es度量。
键是度量名称,值是度量函数(无参数)。
通过在"初始"之后调用此函数,管理器本身可以在度量函数中使用。
请参阅下面的"用法"。
*` exists`
-boolean,度量是否在内存缓存中。
*`清除缓存`
-从缓存中删除所有度量。
*`计算`
-调用度量函数。
缓存并返回数据。
*`保存`
-计算度量并用存储接口保存结果。
缓存到内存和磁盘并返回数据。
*`load`
-加载一个度量(假设存在)
尝试缓存,然后storageinterface失败。
返回数据
*`get`
-调用save,然后加载。
缓存到磁盘,然后storageinterface`。
返回缓存的数据。
overlo使用`[]`(也称为`` getitem`).


此外,`parametereddatedcachemanager`添加了一个强大的装饰器
称为'collect',它可以自动收集度量。


基本用法:

cm=datacachemanager(npystorageinterface(某些目录))

@cm.collect
def metric_1():
stuff=do_something()
return stuff

@cm.collect
def metric_2():
stuff=do_something_else(cm.metric_1())<;-在此处使用缓存版本
other_stuff=convert(stuff)
return other_stuff

现在调用"cm.metric_1()"和"cm"。metric_2()`无缝地使用
缓存(内存和磁盘上)。


这允许自动高效地处理复杂的依赖关系。


如果您愿意,`metric_1(cache=true)`相当于'cm.metric_1()`。
两者都将调用'cm['metric_1'],后者反过来将调用上面显示的"未修饰"metric_1(),如果它不存在。


示例:`metric_1()`将有意跳过缓存,像正常一样运行


难处理(a)


@cm.collect(params_list=[1,2],[1,3],[4,5])
def poly_y(a,b):
返回cm.poly_x(a)**2+do_别的什么东西(b)

`cm.poly_y(1,2)`将运行` poly_y(1,2)`它将运行` cm.poly_x(1)`
它将运行` poly_x(1)`
它将运行` poly_x(1)`
它将运行` poly_x(1)`
x(1)`>
然后r调用"cm.poly_y(1,2)"将加载"cm["poly_y 1_2']`并返回它



运行前的所有操作都可以这样做:

cm.poly廑x.get廑all()
cm.poly廑y.get廑all()

/>您需要确保您已经预先缓存了可能调用的所有内容。

如果您真的想用任何
参数调用缓存管理器中的函数,只需将此选项添加到上面的代码中:

cm=parametereddatacachemanager(npystorageinterface(某些目录),
动态度量创建=真)


除非指定"cache=true",否则不会更改。


_ something()
return stuff

def metric\u2\u function():
stuff=do\u something\u else(cm[metric\u 1])
other\u stuff=convert(stuff)
return other\u stuff

functions\u dict={
metric 1:metric\u 1函数,
metric 2:metric_函数,

}


cm.设置函数dict(functions dict)

如果您鄙视decorator
magic;,您仍然可以使用它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在字符串文本中查找字符串的出现处?   java类对象何时被垃圾回收?   java在没有setter/getter的其他类中切换变量   java禁用依赖项的lint   Android TextView HTML中的java换行符   java Mutiny:处理多个UNI并使用来自“外部”的值   java在JavaFX中使用ComboBox获得选项的空白列表   java仅显示和保存true语句   mavencompilerplugin中使用的release标记/属性和compilerVersion标记/属性之间的差异。升级到java 11时出现的问题   java:单例异常可以工作吗?   java twitter4j setpage()不工作   java如何使用REST在HP ALM 12中创建新缺陷   Eclipse会在每次重新启动时将Java编译器遵从性级别重置为1.7   java组织。冬眠例外虽然捕获到了DataException   查找多维数组*java的特定元素的长度*