跳转到主要内容

Python的GIL和Trio任务的停滞追踪器

项目描述

Perpetuo

perpetuo,动词:使持续不间断,持续进行

Perpetuo是Python的停滞追踪器。具体来说,它可以检测以下情况:

  • 一个线程持有GIL时间过长,阻止其他线程有机会运行(需要CPython的仪器版本)

  • 一个Trio任务运行时间过长而没有检查点,阻止其他任务有机会运行

实际的监控是从一个单独的进程进行的,使用py-spy的定制版本。因此,监控开销非常低,不应干扰被监控的进程。目标是能够在生产环境中使用。

快速入门

  1. pip install perpetuo

  2. 可选:修补CPython(见下文)

  3. import perpetuo

  4. 如果你使用Trio:在trio.run内部调用perpetuo.dwim()

    如果你不使用Trio:在任何地方调用perpetuo.dwim()

  5. 可选:将perpetuo.dwim()的返回值记录下来,以查看它执行了什么操作

可用API

perpetuo.start_watcher():在后台启动监控进程。

perpetuo.instrument_gil():启用GIL仪器,或者如果你没有修补版本的CPython,则引发RuntimeError

perpetuo.instrument_trio():启用Trio仪器。必须在trio.run内部调用。

perpetuo.dwim():尝试以适当的方式调用所有上述函数,并返回一个字符串列表,描述它实际执行了哪些操作。如果你使用Trio,请确保在trio.run内部调用它。

StallTracker:低级类,允许您为其他事物添加自定义工具。请参阅源代码以获取详细信息。

修补CPython以工具化GIL

目前,该补丁仅适用于CPython版本3.10.*。您可以从这里下载:

https://github.com/python/cpython/compare/3.10...njsmith:cpython:njs/perpetuo-gil.diff

附加信息

由Antal Zalai演奏的尼科洛·帕格尼尼的《永恒的动机》

项目详情


下载文件

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

源代码分发

perpetuo-0.5.1.tar.gz (31.6 KB 查看散列

上传时间: 源代码

构建分发

perpetuo-0.5.1-cp39-abi3-win_amd64.whl (1.4 MB 查看散列

上传时间: CPython 3.9+ Windows x86-64

perpetuo-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB 查看散列

上传时间: CPython 3.9+ manylinux: glibc 2.17+ x86-64

perpetuo-0.5.1-cp39-abi3-macosx_10_9_universal2.whl (3.2 MB 查看散列

上传时间: CPython 3.9+ macOS 10.9+ universal2 (ARM64, x86-64)

支持者

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