python的一个日志友好的秒表和分析工具。
bistiming的Python项目详细描述
请访问GitHub repository 更多信息。
BisTiming
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
我们可以使用参数logger和logging\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。