跳转到主要内容

chrome trace格式中的简单分析

项目描述

keke

该项目是一个为Python设计的极其简单的trace-event写入器。

您可以在Perfetto或chrome的about:tracing中读取跟踪。这仅写入在两者中都有效的一致方言,并且足够小巧,足以在将来可能需要跟踪的情况下进行销售。

如果您的需求更像是一个行分析器,您可能需要pytracing(略有废弃,git版本在py3中可以工作)或viztracer(由于大小原因不适用于在其他项目中销售,但积极维护)。

我在编写这个时受到了两者的启发。

简单示例

from __future__ import annotations  # for IO[str]

from typing import IO, Optional
import time

import click

@click.command()
@click.option("--trace", type=click.File(mode="w"), help="Trace output filename")
@click.option("--foo", help="This value gets logged")
def main(trace: Optional[IO[str]], foo: Optional[str]) -> None:
    with keke.TraceOutput(file=trace):
        with kev("main", __name__, foo=foo):
            sub()

def sub():
    with kev("sub1", __name__):
        time.sleep(1)
    with kev("sub2", __name__):
        time.sleep(2)

开销

当未启用时非常接近零。

最简单的不启用方法是调用TraceOutput(file=None),这将不会做任何事情。

进程,或“如何实现分布式跟踪”

这种方法避免了所有魔法。

如果您正在调用另一个(跟踪感知)程序,那么最简单的事情就是想出一个独特的名称,并将其传递给子进程的argv,然后在完成时尝试自己合并它。

如果您正在做类似fork/spawn的事情来继续Python工作,那么父进程可以控制基本信息(如要写入的tmpdir),而子进程可以打开一个带有其pid的唯一文件。

如果您正在做更分布式的事情,您可能需要想出一个guid并将其传递给子进程,以便子进程为以后的日志上传标记它。

关于名称的事

我试图想出一个简短、易于记忆的名称,并且一些渲染的跟踪点非常尖锐,这让我想起了“bouba/kiki效应”。名称“kiki”已被占用,但“keke”未被占用。

许可

keke 版权归 Tim Hatch 所有,并受 MIT 许可证的许可。我在此存储库中向您提供开源许可证下的代码。这是我的个人存储库;您从我这里获得的代码许可证来自我,而不是来自我的雇主。有关详细信息,请参阅 LICENSE 文件。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

keke-0.1.4.tar.gz (9.6 kB 查看哈希)

上传时间

构建分发

keke-0.1.4-py3-none-any.whl (8.0 kB 查看哈希)

上传时间 Python 3

支持者