理解Python asyncio profiler输出

时间:2016-09-06 12:17:13

标签: python python-3.x profiling python-asyncio

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

Python3 asyncio profiler output

我可以看到我的程序花了大约67%的时间来尝试获取线程锁。

  1. 在asyncio程序中这是正常的吗?我的应用程序是单线程的,我不会将任何工作推迟到工作线程并且最低限度地记录到控制台。

  2. 我的应用在精选电话中花费约21%。这是否意味着20%的运行时空闲(等待事件或回调发生)?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

对asyncio应用程序进行性能分析的问题是,在协程上下文切换时,您不会在堆栈中看到它们,并且可能很难确定哪个功能实际上是在花费时间。在您的情况下,您可能会看到asyncio事件循环本身的功能。(不确定是否没有看到输出)

我肯定会建议yappi。通过1.2.1版,它可以本地分析协程并准确告诉您协程内部花费了多少时间在墙壁或CPU上。

有关此协程分析的详细信息,请参见here