python的一个日志友好的秒表和分析工具。

bistiming的Python项目详细描述


请访问GitHub repository 更多信息。

BisTiming

https://img.shields.io/travis/ianlini/bistiming/master.svghttps://readthedocs.org/projects/pip/badge/https://img.shields.io/pypi/v/bistiming.svghttps://img.shields.io/pypi/l/bistiming.svghttps://img.shields.io/github/stars/ianlini/bistiming.svg?style=social

python的一个日志友好的秒表和分析工具。

当我们在互联网上搜索秒表或计时模块中的python时,我们可以找到 有很多代码片段,但没有一个足够强大或方便来完成我们的日常工作 乔布斯。 bistiming的目标是实现那些代码片段中所有缺少的函数 阻止我们重新发明轮子。 当我们想用一些时间信息或甚至是 优化代码的性能。

这个包是用Python2.7、3.5、3.6和3.7测试的,但是也可以在其他的 python版本。

Installation

pip install bistiming

Getting Started

bistiming有一个上下文管理器接口,允许我们记录代码块的运行时间 很容易,而且它还具有低级api,让我们可以对 很容易编码。

examples 所有有用的例子。

Context Manager

使用bistiming的最简单方法是使用上下文管理器Stopwatch 包括我们要评估的代码:

>>> from bistiming import Stopwatch
>>> from time import sleep
>>> with Stopwatch("Waiting"):
...     print("do something")
...     sleep(0.1)
...     print("finished something")
...
...Waiting
do something
finished something
...Waiting done in 0:00:00.100330

我们可以使用参数loggerlogging\u level告诉秒表输出 使用记录器:

>>> import logging
>>> logging.basicConfig(
...     level=logging.DEBUG,
...     format="[%(asctime)s] %(levelname)s: %(name)s: %(message)s")
>>> logger = logging.getLogger(__name__)
>>> with Stopwatch("Waiting", logger=logger, logging_level=logging.DEBUG):
...     print("do something")
...     sleep(0.1)
...     print("finished something")
...
[2019-04-24 22:27:52,347] DEBUG: __main__: ...Waiting
do something
finished something
[2019-04-24 22:27:52,448] DEBUG: __main__: ...Waiting done in 0:00:00.100344

另一个常见的用例是评估特定代码段的运行时间 在循环中,我们可以在循环外初始化秒表,并在循环中重用它:

>>> timer = Stopwatch("Waiting")
>>> for i in range(2):
...     with timer:
...         print("do something 1")
...         sleep(0.1)
...         print("finished something 1")
...     print("do something 2")
...     sleep(0.1)
...     print("finished something 2")
...
...Waiting
do something 1
finished something 1
...Waiting done in 0:00:00.100468
do something 2
finished something 2
...Waiting
do something 1
finished something 1
...Waiting done in 0:00:00.100440
do something 2
finished something 2
>>> timer.split_elapsed_time
[datetime.timedelta(microseconds=100468),
 datetime.timedelta(microseconds=100440)]
>>> timer.get_cumulative_elapsed_time()
datetime.timedelta(microseconds=200908)

split_elapsed_time中的每个项都是 每次迭代中的代码段,我们可以使用 get_cumulative_elapsed_time() 获取代码段的总运行时间。

Low-level API

低级api类似于现实生活中的秒表。 使用低级api的一个简单用例是:

>>> from time import sleep
>>> from bistiming import Stopwatch
>>> timer = Stopwatch("Waiting").start()
...Waiting
>>> sleep(0.2)  # do the first step of my program
>>> timer.split()
...Waiting done in 0:00:00.201457
>>> sleep(0.1)  # do the second step of my program
>>> timer.split()
...Waiting done in 0:00:00.100982

上下文管理器

>>> with Stopwatch("Waiting"):
...     sleep(0.1)
...Waiting
...Waiting done in 0:00:00.100330

实际上相当于低级api:

>>> timer = Stopwatch("Waiting").start()
...Waiting
>>> sleep(0.1)
>>> timer.pause()
>>> timer.split()
...Waiting done in 0:00:00.100330

Advance Profiling

MultiStopwatch在此包中包含多个 Stopwatch,因此我们可以使用它们来定义每个代码段 我们希望能够方便地进行评估和比较:

>>> from time import sleep
>>> from bistiming import MultiStopwatch
>>> timers = MultiStopwatch(2, verbose=False)
>>> for i in range(5):
...    for i in range(2):
...       with timers[0]:
...             sleep(0.1)
...    with timers[1]:
...       sleep(0.1)
...
>>> timers.get_statistics()
{'cumulative_elapsed_time': [datetime.timedelta(seconds=1, microseconds=2879),
                             datetime.timedelta(microseconds=501441)],
 'percentage': [0.6666660019144863, 0.3333339980855137],
 'n_splits': [10, 5],
 'mean_per_split': [datetime.timedelta(microseconds=100288),
                    datetime.timedelta(microseconds=100288)]}

我们还可以使用pandas.DataFrame使统计数据更具可读性 (请注意,您可能需要 install pandas第一个:

>>> import pandas as pd
>>> pd.DataFrame(timers.get_statistics())
  cumulative_elapsed_time  percentage  n_splits  mean_per_split
0         00:00:01.002879    0.666666        10 00:00:00.100288
1         00:00:00.501441    0.333334         5 00:00:00.100288

Documentation

有很多方法可以使用这个包。 有关详细信息,请参见documentation

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

推荐PyPI第三方库


热门话题
java如何在Android上的可访问文件夹中创建文件?(非根)   tomcat Unix脚本未使用Process Runtime在Java中运行   模拟器中的java Android AudioTrack速度异常   java是否创建具有特定@ConditionalOnProperty的注释?   java如何使用json数据从gridview中的URL加载图像?(类别和子类别)   ConcurrentHashMap的java锁定值对象   如何在具有额外属性的Java枚举上执行Javadoc?   java如何修复SocketException连接重置问题?   无附加表的java JPA实体继承   java Android应用程序在启动屏幕后崩溃   java如何将Arraylist保存到文件?   java restTemplate从restfull Web服务获取文件数组   java活动带布局隐藏导航栏   socket未接收任何内容的java BufferedReader