


Uvicorn/FastAPI でのダウンストリーム HTTP リクエストの処理
FastAPI/Uvicorn を使用して API エンドポイントを構築する場合、ダウンストリーム HTTP リクエストを行うのが一般的です。ただし、複数の同時リクエストを処理する場合、開発者は次のエラーに遭遇する可能性があります:
H11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
このエラーは、FastAPI のデフォルトのリクエスト セッションが完全にはスレッドセーフではないために発生します。この課題を克服するには、別のアプローチを採用する必要があります。
非同期 HTTP リクエストに Httpx を使用する
解決策の 1 つは、非同期リクエストを提供する httpx ライブラリを使用することです。 API。 request.Session() の代わりに httpx.AsyncClient() を使用できます。このクライアントでは、基盤となる TCP 接続が再利用されるため、同じホストへの同時リクエストが可能になります。
FastAPI では、起動時に AsyncClient を初期化し、シャットダウン時に閉じるようにライフスパン ハンドラーを定義できます。例:
@asynccontextmanager async def lifespan(app: FastAPI): async with httpx.AsyncClient() as client: yield {'client': client} # Add the client to the app state
エンドポイントでは、request.state.client を使用してクライアントにアクセスできます。次のようにダウンストリーム リクエストを作成できます。
@app.get('/') async def home(request: Request): client = request.state.client req = client.build_request('GET', 'https://www.example.com') r = await client.send(req, stream=True) return StreamingResponse(r.aiter_raw(), background=BackgroundTask(r.aclose))
ストリーミング応答と非ストリーミング レスポンス
ダウンストリーム レスポンスはさまざまな方法でクライアントに送信できます。応答をストリーミングしたい場合は、ジェネレーターを使用して応答データを非同期にループする StreamingResponse を作成できます。それ以外の場合は、r.json()、PlainTextResponse、またはカスタム Response を使用できます。
Httpx を使用する利点
httpx を使用すると、次のような利点があります。
- 同時処理を効率的に行うための非同期 API
- パフォーマンスを向上させるための永続的な接続プール。
- 接続プール サイズの制御。
- FastAPI のライフスパン ハンドラーおよびエンドポイントとの簡単な統合。
httpx を活用することで、開発者はスレッドに遭遇することなく、FastAPI/Uvicorn アプリケーション内でダウンストリーム HTTP リクエストを効果的に行うことができます。安全性の問題。これにより、信頼性が高くスケーラブルな API 動作が保証されます。
以上が同時 FastAPI/Uvicorn アプリケーションでダウンストリーム HTTP リクエストを行うときに「H11._util.LocalProtocolError」を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

choosearraysoverlistsinperbetterperformance andmemoryeficiencyspecificscenarios.1)largeNumericaldatasets:Araysreducememoryusage.2)パフォーマンス - クリティカル操作:ArraysOfferSpeedBoostsfortsfortsclikeappendedoring.3)タイプリー:Arrayesenforc

Pythonでは、ループに使用し、列挙し、包括的なリストを通過することができます。 Javaでは、従来のループを使用し、ループを強化してアレイを通過することができます。 1。Pythonリストトラバーサル方法は、ループ、列挙、およびリスト理解のためのものです。 2。Javaアレイトラバーサル法には、従来のループとループ用の強化が含まれます。

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









