如何调试异步python代码?

时间:2018-03-28 04:18:52

标签: python async-await python-asyncio

我最近在玩异步代码,当我尝试在PyCharm中调试代码时,我发现一些非常奇怪的行为,我认为这是因为底层架构导入了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()

这很奇怪,因为当我在coroutine中设置断点时,永远不会破坏并且整个代码很容易完成运行,除此之外我没有得到很多事件循环的细节(除了堆栈中的一些混乱)。

所以这是我的问题

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

1 个答案:

答案 0 :(得分: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()

相关问题