了解Python异步IO探查器输出

了解Python异步IO探查器输出,python,python-3.x,profiling,python-asyncio,Python,Python 3.x,Profiling,Python Asyncio,我试图在运行基于Python asyncio的程序时理解Python profiler的输出: 我可以看到我的程序花费了约67%的时间试图获得线程锁 这在异步IO程序中正常吗?我的应用程序是单线程的,我不会将任何工作延迟到工作线程,也不会将日志记录到控制台 我的应用程序在select call中花费约21%。这大概意味着20%的运行时间是空闲的(等待事件或回调发生) 看起来您正在使用从所有线程收集数据的调试器。 等待条件变量获取意味着在线程池中等待新任务的空闲时间 在select中花费的时间意

我试图在运行基于Python asyncio的程序时理解Python profiler的输出:

我可以看到我的程序花费了约67%的时间试图获得线程锁

  • 这在异步IO程序中正常吗?我的应用程序是单线程的,我不会将任何工作延迟到工作线程,也不会将日志记录到控制台

  • 我的应用程序在select call中花费约21%。这大概意味着20%的运行时间是空闲的(等待事件或回调发生)


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


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

    分析异步IO应用程序的问题是,当协同路由上下文切换时,您将无法在堆栈中看到它们,并且您可能很难确定实际花费的时间是哪个函数。在您的例子中,您可能看到了asyncio事件循环自己的函数(当然,如果没有看到输出,则不确定)

    我绝对建议。在版本1.2.1中,它可以在本机上评测协同路由,并准确地告诉您在协同路由中花费了多少墙或cpu时间

    有关此协同程序配置的详细信息,请参阅