理解Python asyncio分析器的输出结果

3

我正在尝试理解运行Python asyncio程序时Python分析器的输出:

Python3 asyncio profiler output

我可以看到我的程序花费了大约67%的时间来尝试获取线程锁。
1.在asyncio程序中,这种情况正常吗?我的应用程序是单线程的,我没有将任何工作延迟到工作线程中,并且最小化记录到控制台。
2.我的应用程序在select调用中花费了大约21%的时间。这是否意味着大约20%的运行时间处于空闲状态(等待事件或回调发生)?
2个回答

1

看起来你正在使用从所有线程收集数据的调试器。 等待条件变量获取意味着在线程池中空闲等待新任务。

select中花费的时间再次意味着空闲等待,但在这种情况下它是等待网络活动。


1
异步应用程序分析的问题在于,当协程上下文切换时,您将无法在堆栈中看到它们,并且您可能很难弄清楚实际花费时间的函数是哪个。在您的情况下,您可能会看到 asyncio 事件循环自己的函数。(当然,没有看到输出我就不确定。)
我绝对建议使用 yappi。从版本 1.2.1 开始,它可以本地化地分析协程并告诉您在协程内部花费了多少墙壁或 CPU 时间。
有关此协程分析的详细信息,请参见 此处

Yappi 对于 asyncio Python 代码非常棒。谢谢。 - milia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接