You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建计时器统计函数两次执行间隔时长,大型项目中timeit模块是否适用?

结论

你的判断是正确的,timeit模块确实无法满足该场景的需求。

原因分析
  • timeit的设计定位是小段独立代码的基准性能测试,默认会重复执行目标代码数千次以统计平均耗时,无法嵌入到复杂项目的实际运行链路中追踪真实调用时序
  • timeit无法兼容大型项目中函数的上下文依赖,项目内的函数运行依赖大量模块状态、入参上下文,timeit的独立运行模式无法复现实际的调用场景
  • timeit没有内置的调用时序记录能力,无法自动留存同一函数前一次调用的时间戳,自然也不能计算相邻两次执行的时间差
适配大型项目的实现方案

推荐使用装饰器实现无侵入埋点,不需要修改原有业务代码即可完成统计,示例代码如下:

import time
from functools import wraps
from typing import Callable

# 存储函数上一次执行的时间戳,多线程场景可以替换为 threading.local() 存储线程独立的时间戳
func_last_call_map = {}

def track_call_interval(func: Callable) -> Callable:
    @wraps(func)
    def wrapper(*args, **kwargs):
        current_ts = time.perf_counter()
        # 用模块+函数名作为唯一标识,避免重名函数冲突
        func_uniq_id = f"{func.__module__}.{func.__qualname__}"
        
        if func_uniq_id in func_last_call_map:
            interval = current_ts - func_last_call_map[func_uniq_id]
            # 可按需替换为写日志、上报监控系统等逻辑
            print(f"函数 {func_uniq_id} 相邻调用间隔:{interval:.6f}s")
        
        # 更新上次调用时间
        func_last_call_map[func_uniq_id] = current_ts
        return func(*args, **kwargs)
    return wrapper

使用时仅需要在要统计的目标函数上添加@track_call_interval装饰器即可。


内容的提问来源于stack exchange,提问作者Franz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:57:02