我有一个Python命令行程序,需要一段时间才能完成。我想知道完成跑步所需的确切时间。
我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。
我有一个Python命令行程序,需要一段时间才能完成。我想知道完成跑步所需的确切时间。
我看过timeit模块,但它似乎只适用于小代码片段。我想给整个节目计时。
当前回答
import time
start_time = time.clock()
main()
print(time.clock() - start_time, "seconds")
time.clock()返回处理器时间,它允许我们仅计算此进程使用的时间(无论如何,在Unix上)。文档中说“无论如何,这是用于Python基准测试或计时算法的函数”
其他回答
这是获取程序运行时间的最简单方法:
在程序末尾编写以下代码。
import time
print(time.clock())
对于函数,我建议使用我创建的这个简单的修饰符。
def timeit(method):
def timed(*args, **kwargs):
ts = time.time()
result = method(*args, **kwargs)
te = time.time()
if 'log_time' in kwargs:
name = kwargs.get('log_name', method.__name__.upper())
kwargs['log_time'][name] = int((te - ts) * 1000)
else:
print('%r %2.22f ms' % (method.__name__, (te - ts) * 1000))
return result
return timed
@timeit
def foo():
do_some_work()
# foo()
# 'foo' 0.000953 ms
稍后回答,但我使用内置的timeit:
import timeit
code_to_test = """
a = range(100000)
b = []
for i in a:
b.append(i*2)
"""
elapsed_time = timeit.timeit(code_to_test, number=500)
print(elapsed_time)
# 10.159821493085474
在code_to_test中包装所有代码,包括可能的任何导入。number参数指定代码应该重复的次数。演示
from time import time
start_time = time()
...
end_time = time()
time_taken = end_time - start_time # time_taken is in seconds
hours, rest = divmod(time_taken,3600)
minutes, seconds = divmod(rest, 60)
我很喜欢保罗·麦奎尔的答案,但我使用的是Python 3。因此,对于感兴趣的人来说:这里是他在*nix上使用Python 3的答案的修改(我想,在Windows下,应该使用clock()而不是time()):
#python3
import atexit
from time import time, strftime, localtime
from datetime import timedelta
def secondsToStr(elapsed=None):
if elapsed is None:
return strftime("%Y-%m-%d %H:%M:%S", localtime())
else:
return str(timedelta(seconds=elapsed))
def log(s, elapsed=None):
line = "="*40
print(line)
print(secondsToStr(), '-', s)
if elapsed:
print("Elapsed time:", elapsed)
print(line)
print()
def endlog():
end = time()
elapsed = end-start
log("End Program", secondsToStr(elapsed))
start = time()
atexit.register(endlog)
log("Start Program")
如果你觉得这很有用,你仍然应该投票给他的答案,而不是这一个,因为他做了大部分工作;)。