代码计时类
timerset的Python项目详细描述
timerset
有助于为检测和其他目的进行代码计时,在代码和资源使用方面占用的空间非常小。无论一组中包含多少计时器,构建和报告只需要一行代码。在Unix和Windows上测试。
用法(摘自maincolgroup.py)
fromcontextimporttimersetimportcolgroupascgts=timerset.TimerSet('Timer_ts')(input_file,delim,col)='./examples/colgroup/fantasy_premier_league_player_stats.csv',',',6grp=cg.ColGroup(input_file,delim,col)ts.increment_time('ColGroup')...grp.pr_list('value (lambda)',grp.sort_by_value_lambda())ts.increment_time('sort_by_value_lambda')print(ts.format_results())
这将创建一个计时器集,并计时各个部分,最后列出:
Timer set: Timer_ts, constructed at 2018-12-04 07:11:19, written at 2018-12-04 07:11:19
=======================================================================================
Timer Elapsed CPU Calls Ela/Call CPU/Call
-------------------- ---------- ---------- ---------- ------------- -------------
ColGroup 0.08 0.05 1 0.08144 0.04688
list_as_is 0.01 0.00 1 0.01002 0.00000
sort_by_key 0.01 0.00 1 0.00841 0.00000
sort_by_valueIG 0.01 0.00 1 0.01271 0.00000
sort_by_value_lambda 0.01 0.00 1 0.01315 0.00000
(Other) 0.00 0.00 1 0.00009 0.00000
-------------------- ---------- ---------- ---------- ------------- -------------
Total 0.13 0.05 6 0.02097 0.00781
-------------------- ---------- ---------- ---------- ------------- -------------
[Timer timed (per call in ms): Elapsed: 0.00249, CPU: 0.00233]
从根(timerset)文件夹(unix表单)运行示例:
$python./examples/colgroup/maincolgroup.py
API
fromcontextimporttimerset
ts=timerset.timerset('ts_name')
构造一个新的计时器集
ts.递增时间(计时器名称)
在timer setts
内,将timertimer\u name
的计时统计信息(已用时间、用户和系统CPU以及调用次数)与自上次调用increment\u time、inittime或timer set实例的构造函数以来所经过的时间一起递增。将timer setts
的统计信息重置为当前时间,以便下次调用increment_time从该点开始测量其增量。
初始时间(
将timer setts
的统计信息重置为当前时间,以便下次调用increment_time从该点开始测量其增量。仅当要计时的节之间存在间隙时才使用此选项。
ts.获取计时器()
以元组数组的形式返回timer setts
的结果,字段为:
计时器
:计时器名称ela
:已用时间(sCPU
:CPU时间(s通话
:通话次数
在每个指定计时器的记录之后,按创建顺序,有两个计算记录:
其他
:总值与指定计时器之和之间的差异总计
:根据计时器设置构造时的时间计算的总计
ts.format_计时器(时间宽度、时间dp、时间比率、通话宽度)
返回格式化字符串数组(包括列标题和格式化行)中的timer setts
的结果,其中包含get-timers、times in seconds和per-call值等字段,参数为:
时间宽度
:时间字段的宽度(不包括小数点),默认值8时间dp
:显示绝对时间字段的小数位数,默认值2time_ratio_dp
:显示每个通话时间字段的小数位,默认值为5调用宽度
:调用宽度字段,默认为10
timerset.get_self_timer()
静态计时方法-增量计时方法,用于估算使用计时器设置时的开销。构造一个定时器集实例,并在一个循环中调用递增时间,直到0.1秒结束。
返回一个元组,包含字段:
ela
:每次呼叫所用的时间(毫秒)CPU
:每次呼叫的CPU时间(毫秒)
timerset.format_self_timer(时间宽度、时间dp、时间比率)
静态方法,以格式化字符串的形式返回get_self_timer的结果,参数为format_timer(但此处会修剪任何多余的空格)。
ts.format_results(时间宽度、时间dp、时间比率、通话宽度)
以格式化字符串形式返回计时器集ts
的结果,参数为格式化计时器。它使用格式计时器返回的数组,包括一个具有计时器集构造和写入时间的标题行,以及一个自定时值的页脚。
安装
运行
$ pip install timerset
单元测试
单元测试程序可以从包根文件夹(timerset)运行:
python./test/testtimerset.py
该程序是由输入文件timerset.json数据驱动的,并生成输出文件timerset_out.json,即按组和方案包含预期和实际记录的数组。
如果需要,输出文件可以由一个单独的javascript程序处理,该程序必须从npm
javascript存储库中单独下载。javascript程序以html和/或文本格式生成结果列表,列表的示例集包含在test\timerset文件夹中。要安装javascript程序,trapit
:
安装了NPM后,运行
$ npm install trapit
使用数学函数单元测试设计模式对包进行测试(另请参见下面的
)。在这种方法中,将构造一个"纯"包装函数,该函数接受输入参数并返回一个值,并在从json文件读取的场景记录上进行循环测试。
wrapper函数表示包的一般事务性使用,其中可以构造多个计时器集,然后在事务结束时执行并报告计时。
这种软件包通常很难进行单元测试,因为CPU和运行时间本质上是不确定的。然而,这是我最近介绍的设计模式的强大功能的一个很好的例子:输入之一是一个yes/no标志,指示是否模拟系统计时调用。用于返回划时代cpu和运行时间的函数调用实际上是以(windows)系统函数为默认值的参数,而在模拟情况下,确定性版本由测试驱动程序提供,用于读取从输入场景数据返回的值。这样我们就可以使用确定性函数来测试时间聚合的正确性、计时器集的独立性等;另一方面,自动化单元测试的一个关键好处是测试实际的依赖关系,在非模拟情况下,我们将"睡眠"时间传递给包装函数,并根据值的范围测试输出。
操作系统
这个软件包在unix和windows上都能工作。它需要python 3.x,并且已经在以下位置进行了测试:
窗口
Windows 10,python 3.7.1版
Unix
Oracle Linux服务器7.5(通过Windows主机上的VirtualBox),Python 3.7.1
另请参见
许可证
麻省理工学院< /P>