跳转到主要内容

一个用于在运行时对Python代码进行度量的库。

项目描述

诊断

一个用于在运行时对Python代码进行度量的库。

探针

结构化日志、指标和可观察性很好,但几乎总是需要您修改代码,这会打断阅读代码时的流程。它通常还要求构建周期来修改;制作工单、进行审查、等待构建和部署,然后再全部做一次以撤回临时添加的内容,这并不有趣。在进行研究时,这种做法尤其如此,您可能会进行十多次小实验来测量您的实时代码。

此库允许您在运行时动态添加探针。探针是

  • 可靠的:错误永远不会影响您的生产代码
  • 短暂的:为每个仪表设置“寿命”(以分钟计)
  • 全面的:对所有目标函数的引用都进行了仪表化
  • 快速的:使用快速本地查找测量大多数函数;使用 hunter(在 Cython 中)进行更侵入式的内部探针。

可以直接通过调用 attach_to(target) 创建单个探针

>>> from path.to.module import myclass
>>> myclass().add13(arg=5)
18
>>> p = diagnose.probes.attach_to("path.to.module.myclass.add13")
>>> p.instruments["foo"] = diagnose.LogInstrument("foo", "arg")
>>> p.start()
>>> myclass().add13(arg=5)
Probe (foo) = 5
18

仪表不仅限于记录设备!使用探针来触发任何类型的事件处理器。仪表可以自由维护自己的状态,或从其他地方读取它,以控制自己的行为或实现反馈机制。一个真正的邪恶仪表甚至可以动态更改传递给函数的参数/关键字参数,或调用任意的Python代码来执行各种疯狂的事情。因此,您必须管理添加到您环境中的仪表。

管理器

在运行系统中,我们希望在不代码交互式提示或重启系统的情况下添加、删除、启动和停止探针和仪表;我们使用 InstrumentManager 来做这件事。首先配置全局 diagnose.manager

>>> diagnose.manager.instrument_classes = {
    "log": LogInstrument,
    "hist": MyHistogramInstrument,
    "incr": MyIncrementInstrument,
}
>>> diagnose.manager.global_namespace.update({"foo": foo})

稍后,您可以定义仪器

>>> diagnose.manager.specs["instr-1"] = {
    "target": "myapp.module.file.class.method",
    "instrument": {
        "type": "log",
        "name": "myapp.method",
        "value": "result",
        "event": "return",
        "custom": {},
    },
    "lifespan": 10,
    "lastmodified": datetime.datetime.utcnow(),
    "applied": {},
}

然后调用 diagnose.manager.apply(),无论是添加仪器时,还是当您的商店位于MongoDB且定义探针的过程不是目标过程时,都可以按计划进行。

applied 字典将填充有关哪些进程已应用探针以及它们是否遇到任何错误的信息。

断点

断点允许您通过在执行必须停止等待某些条件发生时设置特定的断点,来执行涉及并发性或必须在特定时间触发特定动作的测试。

        with Breakpoint(S3Archive, "unarchive") as bp:
            bp.start_thread(object.unarchive)  # Start something in the background that will invoke S3Archive.unarchive
            bp.wait()  # wait for S3Archive.unarchive to start

            # perform what has to be done once S3Archive.unarchive
            # has been started.
            # Note: you can get at the unarchive's stack frame using
            # bp.stackframe

            bp.release()  # let S3Archive.unarchive proceed.

项目详情


下载文件

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

源分布

diagnose-5.0.1.tar.gz (21.9 kB 查看散列)

上传时间

构建分布

diagnose-5.0.1-py3-none-any.whl (23.0 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面