如何获取Python程序的执行时间?

1756 投票
39 回答
2629035 浏览
提问于 2025-04-15 15:01

我有一个用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 的形式。)

注意:上面代码的 Python 3 版本可以在 这里这里 找到。

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 ---

撰写回答