Python统计代码运行时长:从基础计算到封装类
在Python开发中,评估脚本或函数的执行效率是性能优化的关键步骤。本文详细解析如何利用内置的datetime模块精确计算时间差,并进一步将其封装为TimeDuration类,从而简化日常开发中重复统计运行时间的操作。
基础实现:利用datetime计算时间差
统计代码运行时长最直观的方法是使用Python标准库中的datetime模块。通过记录代码执行前后的时间点,计算两者的差值,即可得到运行耗时。
具体步骤如下:
- 记录起始时间:在代码块开始前,调用
datetime.datetime.now()获取当前时间对象。 - 执行目标代码:运行需要统计时长的逻辑(例如示例中的
time.sleep(5))。 - 记录结束时间:在代码块结束后,再次调用
datetime.datetime.now()。 - 计算差值:用结束时间减去起始时间,得到
timedelta对象。 - 格式化输出:利用
time.gmtime()将总秒数转换为结构体时间,再通过time.strftime("%H:%M:%S")格式化为“时:分:秒”字符串。
以下是基础实现的代码示例:
#!/usr/bin/env python
import datetime
import time
start_time = datetime.datetime.now()
time.sleep(5)
end_time = datetime.datetime.now()
delta = end_time - start_time
delta_gmtime = time.gmtime(delta.total_seconds())
duration_str = time.strftime("%H:%M:%S", delta_gmtime)
print "start time:", start_time
print "end time:", end_time
print "delta_gmtime:", delta_gmtime
print "duration:", duration_str执行上述脚本后,终端输出将显示具体的起始时间、结束时间、转换后的gmtime结构体以及最终格式化的持续时间(如00:00:05)。
进阶封装:TimeDuration类
虽然基础方法有效,但在复杂项目中频繁手动编写时间记录逻辑较为繁琐。通过面向对象的思想,可以将时间统计逻辑封装为一个类TimeDuration,提供start()和stop()接口,从而简化调用过程。
类设计思路
TimeDuration类包含以下核心方法:
start():记录起始时间,并将end_time初始化为None。stop():记录结束时间。若未先调用start(),则打印错误提示并返回。getDurationStr():计算并返回格式化的持续时间字符串。若start_time或end_time为空,则提示必须先调用start和stop。
封装后的代码实现如下:
import datetime
import time
class TimeDuration(object):
'Time duration.'
def __init__(self):
pass
def start(self):
self.start_time = datetime.datetime.now()
self.end_time = None
def stop(self):
if self.start_time is None:
print "ERROR: start() must be called before stop()."
return
self.end_time = datetime.datetime.now()
def getDurationStr(self):
'String of duration with the format "%H:%M:%S".'
if self.start_time is None or self.end_time is None:
print "ERROR: start() and stop() must be called first.";
return
delta = self.end_time - self.start_time
delta_gmtime = time.gmtime(delta.total_seconds())
return time.strftime("%H:%M:%S", delta_gmtime)使用示例
封装完成后,调用方式变得极其简洁。只需实例化TimeDuration,调用start(),执行业务逻辑,再调用stop(),最后通过getDurationStr()获取结果。
#!/usr/bin/env python import time import time_utils duration = time_utils.TimeDuration() duration.start() time.sleep(5) duration.stop() print duration.getDurationStr()
运行该脚本,终端将直接输出00:00:05,无需关心内部的时间处理细节。这种方法不仅减少了代码冗余,还提高了代码的可读性和复用性。
以上就是Python统计代码运行时长的详细内容,更多关于Python性能优化与时间处理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













