Quartasyncio
は、Python のコルーチン システムの上に Flask API を再実装する Python Web フレームワークです。私の特定のケースでは、着信イベントのソースが 1 つだけではなく、非同期ループを継続するイベントのソースが2 つあると想定される Quart Websocket エンドポイントがあります。
1 つのイベント ソースの例:
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/から取得
この例には、受信メッセージ ストリームという1 つのソースがあります。await websocket.receive()
しかし、2 つの可能性のある情報源があり、1 つは であり、もう 1 つは の線に沿ったものである場合、正しいパターンは何でしょうかawait system.get_next_external_notification()
。
どちらかが届いたら、websocket メッセージを送信したいと思います。
を使用する必要があると思いますがasyncio.wait(..., return_when=FIRST_COMPLETED)
、データを見逃さないようにするにはどうすればよいですか (つまりwebsocket.receive()
、system.get_next_external_notification()
両方がほぼ同時に終了する競合状態の場合)。この場合の正しいパターンは何ですか?