Python执行时间统计误区:time.clock()与程序实际耗时差异解析
生产环境中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时间 + 休眠或者等待时间
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













