【问题标题】:How to debug async python code?如何调试异步 python 代码?
【发布时间】:2018-09-06 15:19:06
【问题描述】:

我最近在玩异步代码,当我尝试在 PyCharm 中调试代码时,我看到了一些非常奇怪的行为,我认为这是因为底层架构 import asyncio。 这就是我说的代码。

async def compute(x, y):
    print("Compute %s + %s ..." % (x, y))
    await asyncio.sleep(1.0)
    return x + y

tasks = [compute(x,x) for x in range(10)]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

这很奇怪,因为当我在协程中设置断点时,执行永远不会中断,并且整个代码可以轻松完成运行,除此之外我没有得到事件循环的太多细节(堆栈中的一些混乱除外)。

这是我的问题

  1. 是否有调试异步代码的标准或一些好的做法?
  2. 如何查看事件循环的执行流程?
  3. 为什么它没有在异步函数内部中断?

【问题讨论】:

  • 我认为这可能是因为您使用的是Run 而不是Debug。我已经测试过,它运行良好,没有任何问题。它确实触及断点。

标签: python async-await python-asyncio


【解决方案1】:

只是在此处添加示例:


async def compute(x, y):
    print("Compute %s + %s ..." % (x, y))
    await asyncio.sleep(1.0) # add breakpoint here and then run it in debug mode
    return x + y

tasks = [compute(x,x) for x in range(10)]
loop = asyncio.get_event_loop()
loop.set_debug(True)
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

【讨论】:

  • 如何在 pdb 中逐步调试异步函数?
  • 如何在 pdb 中逐步调试异步函数?
猜你喜欢
  • 2015-12-04
  • 2014-01-08
  • 2012-11-25
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多