代码计时类

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:已用时间(s
  • CPU:CPU时间(s
  • 通话:通话次数

在每个指定计时器的记录之后,按创建顺序,有两个计算记录:

  • 其他:总值与指定计时器之和之间的差异
  • 总计:根据计时器设置构造时的时间计算的总计

ts.format_计时器(时间宽度、时间dp、时间比率、通话宽度)

返回格式化字符串数组(包括列标题和格式化行)中的timer setts的结果,其中包含get-timers、times in seconds和per-call值等字段,参数为:

  • 时间宽度:时间字段的宽度(不包括小数点),默认值8
  • 时间dp:显示绝对时间字段的小数位数,默认值2
  • time_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程序处理,该程序必须从npmjavascript存储库中单独下载。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>

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

推荐PyPI第三方库


热门话题
序列化反序列化java。awt。颜色>java。木卫一。InvalidClassException   java禁用多个日期范围jDateChooser   java为什么我的特例apper会被扔进泽西/灰熊?   JavaIntelliJ比较两个覆盖率数据   java什么是servletsdefault。你怎么办?   单击几下libgdx后java按钮没有响应   使用java将字符串转换为JSONArray   文件系统在java中刷新fileSystemViewer   java如何在hibernate中避免脏检查   java奇怪的问题,带有分号和“无法解决…”   java将值从子面板传递到父面板   HTML JTextPane CSS的Java FontSizeAction   java文件代码神秘地变成了一堆(0000)