問題タブ [quart]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python Quart/Hypercorn のストリーミング応答により net::ERR_HTTP2_PROTOCOL_ERROR 200 が発生する
クライアントに応答をストリーミングするQuartアプリがあります。asyncio.sleep を使用して応答の完了を遅らせています。遅延を 59 秒に設定すると、すべて正常に動作します。ストリームは問題なく完了します。時間を 120 秒に増やすと、応答がタイムアウトしたように見えます。これはクライアントが受信したストリームの最初の部分ですが、約 60 秒後にブラウザが Chrome で次のようなエラーをスローします: net::ERR_HTTP2_PROTOCOL_ERROR 200. Firefox は TypeError をスローします。
NginxでHypercornを使用しています。
ハイパーコーンの config.py ファイルには次のように書かれています。
nginx.conf の関連する設定:
これを解決する方法がわかりません。
問題の原因がわかりました。Quart、Hypercorn、Nginx とは何の関係もありません。問題は Cloudflare と http2 にあり、WriteTimeout が原因です。この回答を参照してください: net::ERR_HTTP2_PROTOCOL_ERROR とは何ですか?
問題は、Cloudlfare でこれを変更する方法です。
Quart が http2 で動作するように構成されていません。
python - 非同期 Python サーバー: 起動時に起動して忘れる
非同期タスクを処理する必要があるサーバーを作成しています。非同期コードでは asyncio に固執したいので、Uvicorn で Quart[-OpenAPI] フレームワークを使用することにしました。
ここで、サーバーの起動時にタスク (master.resume()
以下のコード) を実行する必要があります。サーバーが完了するのを待たずに、つまり、起動して忘れます。
このタスクを待つことができないため、asyncio でも可能かどうかはわかりませんが、そうしないとcoroutine X was never awaited
エラーが発生します。この回答でloop.run_until_complete()
提案されているように使用すると、タスクが完了するまでサーバーがブロックされます。
これが私が持っているコードのスケルトンです:
これを asyncio/Quart で達成できない場合、適切な方法は何でしょうか?