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

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第三方库


热门话题
java如何使用“this”关键字调用类中具有1个以上参数的多个构造?   java中轮廓的opencv并集   java Qt软件包安卓。支持v4。应用程序不存在   java JPA:如何将字符串持久化到数据库字段中,键入MYSQL文本   java扫雷器随机生成地雷算法不正确   ApacheStorm中的java并行性和告诉主管该怎么做   jvm或AWS S3端的java Max文件上载限制   java Spring安全OAuth2在成功登录后重定向到登录   当我运行jframe时,它总是显示“java.lang.NumberFormatException:空字符串”   java返回Spring MVC Post请求的JSON响应   java用户登录和密码:数据库确认   安卓的问题。getToken()java。木卫一。IOException:无效的\u目标\u版本   从Android连接到IBM Watson对话API时发生java未知模式字符“X”异常   java我们可以在春季会话超时之前设置条件吗?   java理解@MockBean与“RestTemplate RestTemplate”的用法