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

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

生产环境中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 相关产品和应用

全部下载

专题列表