按路线处理时,fieldfrom typing import Any复制import timefrom dataclasses import dataclassCallable@dataclassclass Span:name: strt0: floatt1: float = 0.0ok: bool = Falseerror: str = ""meta: dict = field(default_factory=dict)@propertydef ms(self) -> float:return max(0.0(self.t1 - self.t0) * 1000)@dataclassclass Trace:spans: list = field(default_factory=list)def add(selfspan: Span) -> None:self.spans.append(span)def summary(self) -> dict:by = {}for s in self.spans:row = by.setdefault(s.name{"n": 0"fail": 0"ms": 0.0})row["n"] = 1row["fail"] = 0 if s.ok else 1row["ms"] = s.msreturn by一次任务结束后先看 summary():哪个工具调用次数异常、失败率高、总耗时占比最大卡点通常就在这三项的交集里。