嵌套遥测记录器。
austen的Python项目详细描述
奥斯汀
嵌套遥测记录器。
非常适合打印算法。转储到json
文件中。
功能
Austen
背后的核心思想是用精确的参数记录算法调用堆栈,这些参数存储在字典中并转储到json
。
另外,Austen
处理一些附加文件类型的转储。其中包括:
- 绘图
- 床单
- 图像
- 对象(使用
joblib
)
所有文件都将转储到与算法(每个分支的文件夹)对应的文件夹结构中。
开始
pip install austen
如何使用
手动输入
我们首先从库中导入Logger
类。
fromaustenimportLogger
现在我们可以实例化Logger
对象。
logger=Logger(output='logs')
通过output
参数,可以为后续转储指定基目录。
它将转储到当前工作目录(相对路径)。如果你想把它扔到别的地方,就把绝对路径放进去。现在它将转储到./logs/
。
现在让我们在日志中添加一些条目。
logger.add_entry('foo','bar')
也可以一次添加多个条目。
entries=[('a',1),('b',2),('c',5)]logger.add_entries(entries)
条目存储在字典中。这意味着密钥必须是散列的。
如果您认为某些内容适合于json
格式,只需将其推送到logger。
包装函数调用
让我们记录一些函数。
defadd(x,y):returnx+ydeffoo(logger:Logger,x,y):returnlogger.log_func(func=add,kwargs={'x':x,'y':y})
其他文件类型
现在让我们看看如何转储文件。
图表
logger.save_fig(figure,name='foo')
您的图应该实现来自matplotlib
的savefig
接口。
它实际上是python中绘图的标准。
name
-表示文件名。自动处理文件扩展名。
logs/foo.png
张
withopen('foo.csv')ascsv:frame=pd.read_csv(csv)logger.save_csv(frame,name='foo')
您的框架应该从pandas
实现to_csv
接口。
我想现在每个人都在用pandas
来处理床单。
logs/foo.csv
图像
logger.save_image(image,name='astronaut')logger.save_image(image,name='coffee')
我们使用skimage.io.imsave
来处理图像。图像保存为png
。
logs/astronaut.png logs/coffee.png
logger.save_image(image,name='astronaut',prefix_step=True)logger.save_image(image,name='coffee',prefix_step=True)
还可以使用prefix_step
参数附加一些排序前缀。
现在是时候谈谈steps
。它是记录器中的一个私有计数器,每次使用log_func
时都会递增。因此,以后在查看文件时,可以按名称排序(这是大多数操作系统的默认设置)。它将产生以下结构:
logs/01_astronaut.png logs/02_coffee.png
对象
logger.save_obj(logger,name='logger')
使用joblib
序列化对象。
是时候疯狂一点了(筑巢)
withLogger(logs_dir)aslogger:logger.add_entry('x',0)withlogger.get_child('bar')aschild_logger:child_logger.add_entry('y',1)
您可以使用get_child
方法嵌套记录器。我们建议你用示波器包装你的伐木工人,这样他们更容易管理。
- 一旦记录器被释放,它将合并到父记录器。
- 一旦根日志被释放,它将把所有遥测数据转储到
json
文件中
另一个技巧是以“每个分支的作用域”的方式编写代码——您只使用单一的方法,而只使用单一的记录器。您可以传递带参数的父记录器。
作者
- piotr rarus piotr.rarus@gmail.com