Python统计代码运行时长:从基础计算到封装类

Owen
Owen
发布时间:2026-10-11| 3人浏览过
原创

在Python开发中,评估脚本或函数的执行效率是性能优化的关键步骤。本文详细解析如何利用内置的datetime模块精确计算时间差,并进一步将其封装为TimeDuration类,从而简化日常开发中重复统计运行时间的操作。

基础实现:利用datetime计算时间差

统计代码运行时长最直观的方法是使用Python标准库中的datetime模块。通过记录代码执行前后的时间点,计算两者的差值,即可得到运行耗时。

具体步骤如下:

  1. 记录起始时间:在代码块开始前,调用datetime.datetime.now()获取当前时间对象。
  2. 执行目标代码:运行需要统计时长的逻辑(例如示例中的time.sleep(5))。
  3. 记录结束时间:在代码块结束后,再次调用datetime.datetime.now()。
  4. 计算差值:用结束时间减去起始时间,得到timedelta对象。
  5. 格式化输出:利用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性能优化与时间处理技巧的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。