我正在使用python3编写应用程序,并且第一次尝试使用asyncio。我遇到的一个问题是,一些协程阻塞事件循环的时间长于我的期望。我试图在事件循环的顶部沿线找到一些东西,以显示运行每个协同程序花费的时间是多少时间。如果还不存在任何东西,是否有人知道将钩子添加到事件循环中以便我进行测量的方法?
我尝试使用cProfile提供一些有用的输出,但是我对花费在阻塞事件循环上的时间而不是总执行时间更感兴趣。
事件循环已经可以跟踪协程是否需要花费大量CPU时间来执行。要查看它,您应该使用方法启用调试模式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源代码,看起来您可以更改slow_callback_duration
属性来修改此值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句