简化对应用程序选定部分计时的日志记录。

timing的Python项目详细描述


package version from PyPIbuild status from Travis CItest coverage from Codecovlicense

创建计时模块是为了简化应用程序选定部分的计时记录

如何使用

建议初始化如下。

importtiming_TIME=timing.get_timing_group(__name__)# type: timing.TimingGroup

这遵循logging模块的约定。

importlogging_LOG=logging.getLogger(__name__)

任何名称都可以代替__name__。 但是,如果使用格式为module.sub.subsub的名称,这将创建一个计时 层次结构,其中每个定时数据存储在其适当的位置,并且可以更容易地查询

生成的_TIME对象用于创建单个计时器, 并将处理在缓存中存储结果的操作,稍后可用于获取计时统计信息

您可以通过start(name)方法直接获取计时器对象。 在这种情况下,您需要手动调用stop()

timer=_TIME.start('spam')# type: timing.Timingspam()more_spam()timer.stop()

您还可以通过measure(name)上下文管理器间接获取计时器对象。 上下文管理器将负责在最后调用stop()

with_TIME.measure('ham')astimer:# type: timing.Timingham()more_ham()

如果你想计时同一动作的多次重复(例如,为了统计显著性) 您可以使用measure_many(name[,samples][,threshold])生成器。

您可以通过samples参数决定要测量多少次 以及通过threshold参数最多需要多少秒进行测量

fortimerin_TIME.measure_many('eggs',samples=1000):# type: timing.Timingeggs()more_eggs()fortimerin_TIME.measure_many('bacon',threshold=0.5):# type: timing.Timingbacon()more_bacon()fortimerin_TIME.measure_many('tomatoes',samples=500,threshold=0.5):# type: timing.Timingtomatoes()more_tomatoes()

此外,还可以使用measuremeasure(name)作为装饰符。 在这种情况下,您不能直接访问计时,但结果将被存储 在计时组对象中,以及在全局缓存中,除非配置计时 不使用缓存。

importtiming_TIME=timing.get_timing_group(__name__)@_TIME.measuredefrecipe():ham()eggs()bacon()@_TIME.measure('the_best_recipe')defbad_recipe():spam()spam()spam()

然后,在调用每个函数之后,可以通过summary属性访问结果。

recipe()bad_recipe()bad_recipe()assert_TIME.summary['recipe']['samples']==1assert_TIME.summary['the_best_recipe']['samples']==2

第一次访问时动态计算summary属性。后续访问 不会重新计算值,因此如果需要访问更新的结果, 调用summarize()方法。

recipe()assert_TIME.summary['recipe']['samples']==1bad_recipe()bad_recipe()assert_TIME.summary['the_best_recipe']['samples']==2# will fail_TIME.summarize()assert_TIME.summary['the_best_recipe']['samples']==2# ok

进一步的api和文档正在开发中。

请参阅examples.ipynb笔记本中的这些示例。

要求

python 3.5或更高版本。

requirements.txt中指定的python库。

生成和运行测试还需要test_requirements.txt中列出的包

在Linux和OS X上测试。

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

推荐PyPI第三方库


热门话题
jenkins在java代码的csv中使用前导零传递数字   终止java应用程序javaw。exe eclipse   java平均字长。文本   java在事务中关闭连接时会发生什么?   java如何为rich faces extendedDatatable启用可调整大小的列?   SpringJavaWebApp头nosniff不适合js和css文件   Java:抛出异常   java获取拒绝ArrayList中存在的用户名的代码。   关于编写JNDI服务提供者的java教程   java Android emulator电子书示例已停止   java如何防止双向关系中的循环   在Java中,如何将接口的实现作为变量传递给方法?   java有没有办法通过注释来监听CoreNLP处理的进度?   java Eclipse错误:导入项目时“无法读取项目描述文件”   java为什么findViewById返回null?