Python执行时间统计误区:time.clock()与程序实际耗时差异解析

林见深
林见深
发布时间:2026-10-13| 3人浏览过
原创

生产环境中Python脚本监控耗时远大于内部统计值,排查发现time.clock()仅统计CPU时间,忽略IO与等待。本文对比datetime.now、time.time与time.clock三种方式,明确程序执行时间应包含CPU、IO及休眠时间,推荐使用前者获取真实耗时。

首先分享一个在生产环境中遇到的实际案例:在调度Python脚本并监控其进程时,发现脚本的实际运行时长远远超过了脚本内部自行统计的执行时间。

具体表现为:监控层面记录的Python脚本执行时长为36个小时,而脚本内部统计的执行时间仅为4小时左右,两者存在巨大差异。

发现问题后,首先怀疑是Linux系统层面出现故障,但查阅各类系统日志后,并未发现任何异常记录。

随后考虑是否因Python中使用的py2neo库进行数据写入时采用异步机制,导致进程阻塞从而影响了执行时间。

最终定位到问题根源:Python脚本中用于统计时间的方法是time.clock(),该方法统计的是CPU的执行时间,而非程序的实际执行时间。

接下来,对几种Python中常用的统计时间方式进行对比分析:

方法1:

import datetime
starttime = datetime.datetime.now()
#long running
#do something other
endtime = datetime.datetime.now()
print (endtime - starttime).seconds

使用datetime.datetime.now()获取当前日期时间,在程序执行结束后,通过计算两个时间点的时间差,可以得到程序的实际执行时间。

方法2:

start = time.time()
#long running
#do something other
end = time.time()
print end-start

使用time.time()获取自Unix纪元以来的当前时间(单位为秒)。如果系统时钟支持,返回值可能包含小数部分,因此返回类型为浮点数。此方法获取的也是程序的实际执行时间。

方法3:

start = time.clock()
#long running
#do something other
end = time.clock()
print end-start

time.clock()返回从程序开始或第一次调用clock()以来的CPU时间。其精度与系统记录一致,返回值同样为浮点类型。需要注意的是,这里获得的是CPU的执行时间,而非程序总耗时。

注:程序执行时间 = CPU时间 + IO时间 + 休眠或者等待时间

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。