python执行一段代码_在Python 2.7中获取一段代码的执行时间

本文介绍了如何在Python2.7中测量代码执行时间,提供了使用timeit模块、装饰器和上下文管理器的方法。强调了timeit.default_timer()用于获取高精度时间,并展示了如何创建自定义装饰器和上下文管理器来方便地测量代码块的运行时间。
摘要由CSDN通过智能技术生成

在Python 2.7中获取一段代码的执行时间

我想测量在Python程序中评估代码块所用的时间,可能会在用户cpu时间,系统cpu时间和经过时间之间分离。

我知道timeit模块,但是我有许多自写function,在安装过程中传递它们并不是很容易。

我宁愿有一些可以使用的东西,如:

#up to here I have done something.... start_counting() #or whatever command used to mark that I want to measure #the time elapsed in the next rows # code I want to evaluate user,system,elapsed = stop_counting() #or whatever command says: #stop the timer and return the times

用户和系统的CPU时间并不是必需的(尽pipe我想测量它们),但是对于经过的时间,我希望能够做这样的事情,而不是使用复杂的命令或模块。

要以秒为单位获得stream逝的时间,可以使用timeit.default_timer() :

import timeit start_time = timeit.default_timer() # code you want to evaluate elapsed = timeit.default_timer() - start_time

timeit.default_timer()而不是time.time()或time.clock()因为它将select具有较高分辨率的定时function。

我总是使用装饰器为现有的function做一些额外的工作,包括获得执行时间。 这是pythonic和简单的。

import time def time_usage(func): def wrapper(*args, **kwargs): beg_ts = time.time() retval = func(*args, **kwargs) end_ts = time.time() print("elapsed time: %f" % (end_ts - beg_ts)) return retval return wrapper @time_usage def test(): for i in xrange(0, 10000): pass if __name__ == "__main__": test()

您可以通过上下文pipe理器来实现,例如:

from contextlib import contextmanager import time import logging @contextmanager def _log_time_usage(prefix=""): '''log the time usage in a code block prefix: the prefix text to show ''' start = time.time() try: yield finally: end = time.time() elapsed_seconds = float("%.2f" % (end - start)) logging.debug('%s: elapsed seconds: %s', prefix, elapsed_seconds)

使用示例:

with _log_time_usage("sleep 1: "): time.sleep(1)

我发现自己一次又一次地解决了这个问题,于是我终于为它创build了一个库 。 用pip install timer_cm 。 然后:

from timer_cm import timer with Timer('Long task') as timer: with timer.child('First step'): sleep(1) for _ in range(5): with timer.child('Baby steps'): sleep(.5)

输出:

Long task: 3.520s Baby steps: 2.518s (71%) First step: 1.001s (28%)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值