我想测量评估Python程序中的一段代码所用的时间,可能分为用户cpu时间、系统cpu时间和已用时间。
我知道timeit
模块,但我有很多自己编写的函数,在安装过程中传递它们并不是很容易。
我更想要一些可以使用的东西,比如:
#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时间不是必须的(尽管我想测量它们),但是对于经过的时间,我希望能够做这样的事情,而不是使用复杂的命令或模块。
发布于 2013-03-30 00:19:01
要获得以秒为单位的运行时间,可以使用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()
,因为它将为任何平台选择具有更高分辨率的计时功能。
发布于 2013-03-30 00:36:15
我总是使用装饰器为现有函数做一些额外的工作,包括获取执行时间。它是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()
发布于 2016-05-25 14:57:23
您可以通过Context Manager来实现这一点,例如:
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)
https://stackoverflow.com/questions/15707056
复制相似问题