python-3.x - Python 调试器没有进入协程?

标签 python-3.x pycharm python-asyncio ipdb

在下面的示例中:

import asyncio
import ipdb

class EchoServerProtocol:
    def connection_made(self, transport):
        self.transport = transport

    def datagram_received(self, data, addr):
        message = data.decode()
        print('Received %r from %s' % (message, addr))
        print('Send %r to %s' % (message, addr))
        self.transport.sendto(data, addr)

loop = asyncio.get_event_loop()
ipdb.set_trace(context=21)
print("Starting UDP server")
# One protocol instance will be created to serve all client requests
listen = loop.create_datagram_endpoint(    EchoServerProtocol, local_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(listen)

try:
    loop.run_forever()
except KeyboardInterrupt:
    pass

transport.close()
loop.close()

我正在尝试进入
loop.create_datagram_endpoint( EchoServerProtocol, local_addr=('127.0.0.1', 9999))
了解它在内部的行为方式。
但是,当我尝试进入协程时,调试器就像 n 一样跳过它。已按下而不是 s .
> ../async_test.py(18)<module>()
     17 # One protocol instance will be created to serve all client requests
---> 18 listen = loop.create_datagram_endpoint(    EchoServerProtocol, local_addr=('127.0.0.1', 9999))
     19 transport, protocol = loop.run_until_complete(listen)

ipdb> s
> ../async_test.py(19)<module>()
     18 listen = loop.create_datagram_endpoint(    EchoServerProtocol, local_addr=('127.0.0.1', 9999))
---> 19 transport, protocol = loop.run_until_complete(listen)
     20 

ipdb> 

PyCharm (2016 2.3 Community) IDE 体验到了这种行为。

我希望结束here并且能够额外单步执行代码。

最佳答案

如果你调用 await 就可以了或 yield from为你的协程喜欢

listen = await loop.create_datagram_endpoint(EchoServerProtocol, 
                                             local_addr=('127.0.0.1', 9999))

在您的示例中 listen不是协程执行的结果,而是 协程实例 本身。
实际执行由下一行执行:loop.run_until_complete() .

关于python-3.x - Python 调试器没有进入协程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39495580/

相关文章:

python - 是否可以在 Pygame 中更改 Sprite 颜色?

ubuntu - 如何在 Windows 子系统 Linux Ubuntu 上安装 Pycharm

python - 在 init 方法中将变量分配为 None 时抑制 PyCharm 警告

python - Python asyncio:按顺序完成

python - 在Python/Pandas中为每次多条记录的时间序列数据添加新的 'step'值列

regex - Python 3 中最快的标记化函数是什么?

python - 逐步创建异步任务并等待所有任务完成

python - 从 Python 异步中断

python - 一定范围内的随机数组

python - 导入错误:C 扩展:没有名为 'parsing' 的模块未构建