1、参考:?https://yanbin.blog/how-flask-work-with-asyncio/#more-10368
2、 先前使用queue.Queue,这个队列是自带锁机制,且其put,get方法可以使用阻塞,造成调用Flask的api接口发送socket消息时,有时能发,有时不能发的问题,后改为协程实现。
import asyncio
async def send_one_msg(self, msg):
try:
soc_bytes = self.get_pack_buf(msg)
self.client.send(soc_bytes)
except Exception as e:
print("send_one_msg 发送失败:", str(e))
def async_send_on_msg(self, msg):
try:
try:
loop = asyncio.get_event_loop()
except RuntimeError as er:
print(er.args[0], 'create a new EventLoop')
loop = asyncio.new_event_loop()
loop.run_until_complete(self.send_one_msg(msg))
# python3.7才支持
# asyncio.run(self.send_one_msg(msg))
except Exception as e:
print("async_send_on_msg 发送失败:", str(e))
3、感觉async, await与.net中的机制类似。
|