如何获取Python程序的执行时间?
我有一个用Python写的命令行程序,它运行起来需要一些时间。我想知道它到底花了多长时间才能完成。
我查过timeit
这个模块,但感觉它只适合用来测量小段代码的时间。我想测量整个程序的运行时间。
39 个回答
260
我把这个 timing.py
模块放到了我自己的 site-packages
目录里,然后在我的模块最上面加上 import timing
这一行:
import atexit
from time import clock
def secondsToStr(t):
return "%d:%02d:%02d.%03d" % \
reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
[(t*1000,),1000,60,60])
line = "="*40
def log(s, elapsed=None):
print line
print secondsToStr(clock()), '-', s
if elapsed:
print "Elapsed time:", elapsed
print line
print
def endlog():
end = clock()
elapsed = end-start
log("End Program", secondsToStr(elapsed))
def now():
return secondsToStr(clock())
start = clock()
atexit.register(endlog)
log("Start Program")
如果我的程序中有一些重要的阶段想要展示,我也可以在程序里调用 timing.log
。不过,单单加上 import timing
就能打印出程序的开始时间、结束时间和总共耗时。(请原谅我那个不太好理解的 secondsToStr
函数,它只是把浮点数形式的秒数格式化成 hh:mm:ss.sss 的形式。)
291
在Linux或Unix系统中:
$ time python yourprogram.py
在Windows系统中,可以查看这个StackOverflow的问题:我该如何测量Windows命令行中一个命令的执行时间?
如果你想要更详细的输出,可以使用:
$ time -v python yourprogram.py
Command being timed: "python3 yourprogram.py"
User time (seconds): 0.08
System time (seconds): 0.02
Percent of CPU this job got: 98%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 9480
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 1114
Voluntary context switches: 0
Involuntary context switches: 22
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
3000
在Python中,最简单的方法是:
import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
这个方法假设你的程序运行至少需要十分之一秒。
输出结果是:
--- 0.764891862869 seconds ---