Quartasyncio
是一个 Python Web 框架,它在 Python 的协程系统之上重新实现了 Flask API 。在我的特殊情况下,我有一个 Quart websocket 端点,它应该不仅有一个传入事件源,还有两个可能的事件源,它们应该继续异步循环。
具有一个事件源的示例:
from quart import Quart, websocket
app = Quart(__name__)
@app.websocket("/echo")
def echo():
while True:
incoming_message = await websocket.receive()
await websocket.send(incoming_message)
取自https://pgjones.gitlab.io/quart/
这个例子有一个来源:传入的消息流。但是,如果我有两个可能的来源,一个是await websocket.receive()
,另一个是类似的东西,那么正确的模式是什么await system.get_next_external_notification()
。
如果其中任何一个到达,我想发送一条 websocket 消息。
我想我必须使用asyncio.wait(..., return_when=FIRST_COMPLETED)
,但是我如何确保我没有错过任何数据(即对于几乎同时完成的比赛条件)websocket.receive()
?system.get_next_external_notification()
在这种情况下,正确的模式是什么?