Python程序执行时间的测量方法

Python程序执行时间的测量方法

技术背景

在开发Python程序时,我们经常需要了解程序的执行时间,这有助于我们评估程序的性能,找出性能瓶颈,进而进行优化。例如,对于一个运行时间较长的命令行程序,我们就需要精确测量其执行时间。虽然timeit模块可以用于测量小代码片段的执行时间,但对于整个程序的计时,我们需要更合适的方法。

实现步骤

1. 使用time模块

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

1
2
3
4
5
6
import time

start_time = time.time()
# 这里是你的主程序代码,假设为main()函数
# main()
print("--- %s seconds ---" % (time.time() - start_time))

2. 使用系统命令(适用于Linux或Unix)

在终端中使用time命令可以直接测量Python程序的执行时间。

1
$ time python yourprogram.py

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

1
$ time -v python yourprogram.py

3. 使用datetime模块

datetime模块可以提供人类可读的时间格式,通过记录开始和结束时间,然后计算时间差来得到程序的执行时间。

1
2
3
4
5
from datetime import datetime
start_time = datetime.now()
# 这里是你的主程序代码
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

4. 使用cProfile模块

cProfile模块可以测量CPU时间,并且可以显示每个函数的执行时间和调用次数,有助于找出性能瓶颈。

1
$ python -m cProfile yourprogram.py

5. 使用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))

6. 使用第三方库horology

horology库可以方便地测量程序的执行时间,并且可以自动处理时间单位和四舍五入。

1
2
3
4
5
from horology import Timing

with Timing(name='Important calculations: '):
# 这里是你的主程序代码
pass

核心代码

以下是几种常用方法的核心代码示例:

使用time模块

1
2
3
4
5
6
7
8
import time

start_time = time.time()
# 模拟主程序代码
for i in range(1000000):
pass
end_time = time.time()
print("Execution time: ", end_time - start_time, "seconds")

使用datetime模块

1
2
3
4
5
6
7
8
from datetime import datetime

start_time = datetime.now()
# 模拟主程序代码
for i in range(1000000):
pass
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

使用cProfile模块

1
$ python -m cProfile yourprogram.py

使用timeit模块

1
2
3
4
5
6
7
8
9
10
import timeit

start = timeit.default_timer()
# 模拟主程序代码
for i in range(1000000):
pass
stop = timeit.default_timer()
execution_time = stop - start

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

最佳实践

  • 简单计时:如果只是简单地测量整个程序的执行时间,使用time模块或datetime模块是最简单的方法。
  • 性能分析:如果需要详细分析程序的性能,找出性能瓶颈,使用cProfile模块是一个不错的选择。
  • 小代码片段计时:如果只需要测量小代码片段的执行时间,使用timeit模块可以得到更准确的结果。
  • 方便的计时:如果想要更方便地测量程序的执行时间,并且自动处理时间单位和四舍五入,可以使用第三方库horology

常见问题

1. time模块计算的时间包含系统时间变化的影响

如果系统时间在程序运行期间发生变化(如与时间服务器同步),使用time模块计算的时间可能会不准确,甚至可能出现负数。

2. time.clock()在Python 3.3及以上版本已被弃用

在Python 3.3及以上版本中,time.clock()已被弃用,建议使用time.perf_counter()time.process_time()代替。

3. timeit模块适用于小代码片段

timeit模块虽然可以用于整个程序的计时,但它更适用于小代码片段的计时,因为它会多次执行代码以获得更准确的结果。


Python程序执行时间的测量方法
https://119291.xyz/posts/2025-04-15.python-program-execution-time-measurement/
作者
ww
发布于
2025年4月15日
许可协议