luc*_*one 67 python profiler python-2.7
我想测量在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
Run Code Online (Sandbox Code Playgroud)
用户和系统CPU时间不是必需的(虽然我想测量它们),但是对于经过的时间我希望能够做这样的事情,而不是使用复杂的命令或模块.
And*_*ark 143
要以秒为单位获取经过的时间,您可以使用timeit.default_timer():
import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time
Run Code Online (Sandbox Code Playgroud)
timeit.default_timer()是用来代替time.time()或者time.clock()因为它会为任何平台选择具有更高分辨率的定时功能.
Yar*_*kee 23
我总是使用装饰器为现有函数做一些额外的工作,包括获取执行时间.它是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()
Run Code Online (Sandbox Code Playgroud)
Mic*_*ann 10
我发现自己一次又一次地解决了这个问题,所以我终于为它创建了一个库.安装时pip install timer_cm.然后:
from time import sleep
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)
Run Code Online (Sandbox Code Playgroud)
输出:
Long task: 3.520s
Baby steps: 2.518s (71%)
First step: 1.001s (28%)
Run Code Online (Sandbox Code Playgroud)
您可以通过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)
Run Code Online (Sandbox Code Playgroud)
使用示例:
with _log_time_usage("sleep 1: "):
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80534 次 |
| 最近记录: |