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

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

技术背景

在Python开发中,了解程序的执行时间对于性能优化、算法评估等方面至关重要。不同的场景可能需要不同的计时方法,下面将介绍多种获取Python程序执行时间的方法。

实现步骤

1. 使用time模块

这是一种简单直接的方法,通过记录开始和结束时间,然后计算差值来得到程序的执行时间。

1
2
3
4
5
6
import time

start_time = time.time()
# 这里放置你的程序代码
main()
print("--- %s seconds ---" % (time.time() - start_time))

2. 在Linux或Unix系统中使用time命令

在终端中直接运行Python脚本时,可以使用time命令来获取程序的执行时间。

1
$ time python yourprogram.py

若需要更详细的输出,可以使用-v选项:

1
$ time -v python yourprogram.py

3. 使用datetime模块

datetime模块可以提供更易读的时间差输出。

1
2
3
4
5
6
from datetime import datetime

start_time = datetime.now()
# 执行你的工作
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

4. 使用timeit模块

timeit模块适用于测量小段代码的执行时间,也可用于整个程序。

1
2
3
4
5
6
7
8
import timeit

start = timeit.default_timer()
# 所有的程序语句
stop = timeit.default_timer()
execution_time = stop - start

print("Program Executed in " + str(execution_time))

5. 使用cProfile模块

cProfile模块可以测量CPU时间,还能显示每个函数的执行时间和调用次数,有助于性能优化。

1
$ python -m cProfile euler048.py

6. 在Jupyter Notebook中使用%%time魔法命令

在Jupyter Notebook的单元格中,可以使用%%time来测量该单元格代码的执行时间。

1
2
%%time
sum(x**2 for x in range(10000))

7. 使用自定义装饰器

可以定义一个装饰器来测量函数的执行时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import time

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():
# 执行一些工作
pass

8. 使用horology

horology包提供了简单优雅的计时方式。

1
2
3
4
5
from horology import Timing

with Timing(name='Important calculations: '):
# 执行计算
pass

核心代码

以下是一些常用的计时代码示例:

1
2
3
4
5
6
7
8
9
10
11
# 使用time.perf_counter()
import time
start_time = time.perf_counter()
# 执行代码
end_time = time.perf_counter()
print(end_time - start_time, "seconds")

# 使用time.process_time()
start = time.process_time()
# 执行代码
elapsed = (time.process_time() - start)

最佳实践

  • 对于简单的程序计时,使用time模块的time()perf_counter()方法即可。
  • 若要详细分析程序中各个函数的性能,使用cProfile模块。
  • 在Jupyter Notebook中,使用%%time魔法命令可以快速测量单元格代码的执行时间。
  • 对于需要多次执行的小段代码,使用timeit模块可以得到更准确的平均执行时间。

常见问题

1. time.clock()在Python 3.3及以后版本中被弃用

从Python 3.3开始,time.clock()被弃用,建议使用time.perf_counter()time.process_time()代替,具体使用哪个方法取决于你的需求。

2. 输入导致的计时误差

在程序需要用户输入时,要注意将计时开始的代码放在获取输入之后,否则会将用户输入的时间也计算在内。例如:

1
2
3
4
5
if __name__ == "__main__":
n = int(input())
start_time = time.time()
Prime_under_num(n)
print("Total Running time = {:.3f} seconds".format(time.time() - start_time))

如何获取Python程序的执行时间
https://119291.xyz/posts/how-to-get-python-program-execution-time/
作者
ww
发布于
2025年5月26日
许可协议