python wesockets异步执行时, 发送信息阻塞 卡住的问题
问题
采用的代码: python + websockets
目前在测试需求过程中,在使用 websockets 异步方式时, 发送一个信息的代码如下:
async def heartbeat(self,websocket):
# 发送心跳
while True:
await websocket.send('heartbeat')
如上,如果这个写法,可能会导致 send 之后,程序一直 卡住 或者 阻塞,或者感觉变成了 同步的方式。长时间找不到 解决办法
原因
原因不是看的太明确,下面贴地址,大佬们可以自行查看
参考地址:
https://websockets.readthedocs.io/en/stable/faq/asyncio.html
解决方式
在阻塞处增加 await asyncio.sleep(0)
代码如下(示例):
async def heartbeat(self,websocket):
# 发送心跳
while True:
await websocket.send('heartbeat')
await asyncio.sleep(0) # 增加这一行