我正在使用 python3 编写一个应用程序,并且是第一次尝试 asyncio。我遇到的一个问题是我的一些协程阻塞事件循环的时间比我喜欢的要长。我正在尝试为事件循环找到类似于 top 的内容,以显示运行我的每个协程所花费的墙/CPU 时间。如果没有任何东西已经存在,是否有人知道向事件循环添加 Hook 以便我进行测量的方法?
我曾尝试使用 cProfile 提供一些有用的输出,但我更感兴趣的是阻塞事件循环所花费的时间,而不是总执行时间。
最佳答案
事件循环已经可以跟踪协程是否需要大量 CPU 时间来执行。要查看它,您应该 enable debug mode与 set_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/