python-3.x - 监控异步事件循环

标签 python-3.x profiler python-asyncio

我正在使用 python3 编写一个应用程序,并且是第一次尝试 asyncio。我遇到的一个问题是我的一些协程阻塞事件循环的时间比我喜欢的要长。我正在尝试为事件循环找到类似于 top 的内容,以显示运行我的每个协程所花费的墙/CPU 时间。如果没有任何东西已经存在,是否有人知道向事件循环添加 Hook 以便我进行测量的方法?

我曾尝试使用 cProfile 提供一些有用的输出,但我更感兴趣的是阻塞事件循环所花费的时间,而不是总执行时间。

最佳答案

事件循环已经可以跟踪协程是否需要大量 CPU 时间来执行。要查看它,您应该 enable debug modeset_debug方法:

import asyncio
import time


async def main():
    time.sleep(1)  # Block event loop


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.set_debug(True)  # Enable debug
    loop.run_until_complete(main())

在输出中你会看到:
Executing <Task finished coro=<main() [...]> took 1.016 seconds

默认情况下,它会为阻塞超过 0.1 秒的协程显示警告。它没有记录,但基于 asyncio source code , 看起来你可以更改 slow_callback_duration属性来修改这个值。

关于python-3.x - 监控异步事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856410/

相关文章:

python - 监控文件变化 - Asyncio 和 Flask

Python3 pip模块,检查PyPi上是否存在包

visual-studio-2010 - 如何使用 Microsoft Visual Studio 2010 Performance Profiler 摆脱 "PRF0002: Instrumentation failed with these options"错误?

Python - 带有 asyncio/coroutine 的定时器

.net - Silverlight 内存分析器是否存在?

node.js - NodeJS 0.11 火焰图

python - 为什么我只能在异步函数中使用await关键字?

python - 如何将图例标签添加为条形图注释?

python-3.x - Selenium 通过 xpath 查找元素并单击

python - 如何在 Tkinter 中高效创建大型条目网格?