Python的GIL和Trio任务的停滞追踪器
项目描述
Perpetuo
perpetuo,动词:使持续不间断,持续进行
Perpetuo是Python的停滞追踪器。具体来说,它可以检测以下情况:
-
一个线程持有GIL时间过长,阻止其他线程有机会运行(需要CPython的仪器版本)
-
一个Trio任务运行时间过长而没有检查点,阻止其他任务有机会运行
实际的监控是从一个单独的进程进行的,使用py-spy的定制版本。因此,监控开销非常低,不应干扰被监控的进程。目标是能够在生产环境中使用。
快速入门
-
pip install perpetuo
-
可选:修补CPython(见下文)
-
import perpetuo
-
如果你使用Trio:在
trio.run
内部调用perpetuo.dwim()
如果你不使用Trio:在任何地方调用
perpetuo.dwim()
-
可选:将
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
附加信息
项目详情
perpetuo-0.5.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 518df938560df7f1bcad09561f18e2fde6dfcfcb2ae76713c69584bda6f79409 |
|
MD5 | 1636b48288ebc82f927d994f2bf4c811 |
|
BLAKE2b-256 | 046ca4e976e919d15ba54259f93a91a0defa0770a88fc4e0a29cff3d390ef151 |
perpetuo-0.5.1-cp39-abi3-win_amd64.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1511602b7af681d437b22b1e7101180396d9fc3b7a56871fdc6426ebd3438a0e |
|
MD5 | 166cd79b94717d8dd98035b319d1a8d3 |
|
BLAKE2b-256 | def7f19f076fe00a33e31670e2f391cc3cdb0ee4e299fa673f807a81d62603e8 |
perpetuo-0.5.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3dcd9e9c5e8ca9429b2b3df5812d831c03d480b691dd478eb0a3607f280fbcd9 |
|
MD5 | 7a1adc32f483df2b8eb93936d7e04703 |
|
BLAKE2b-256 | 92643f9c2e797f73c4fef1232cc10b12db8f3b4ba6d27da2b2936ef65b529fee |
perpetuo-0.5.1-cp39-abi3-macosx_10_9_universal2.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a4ca009dedc23bf2001d0a59e5fc3770634cb78f9afd33792bab30f0981c5e0a |
|
MD5 | 1585edcaf75b8044418ddd01bbcaac28 |
|
BLAKE2b-256 | 4a92c7e5fa0412d983b56a5f6e6181ad7da0adf7864eae07a401d8085b453019 |