ホームページ >バックエンド開発 >Python チュートリアル >httpx はどのようにして FastAPI でのダウンストリーム HTTP リクエストを安全かつ効率的に強化できますか?
標準の Python リクエスト ライブラリを使用して FastAPI で HTTP リクエストを作成する場合、同時リクエストの中でスレッドの安全性が問題になります。この問題に効果的に対処するには、スレッド セーフとパフォーマンスの向上の両方を提供するライブラリである httpx の採用を検討してください。
httpx には非同期 API が付属しているため、簡単に複数の同時タスクを効率的に処理しながら、HTTP リクエストを実行します。 FastAPI エンドポイント内での使用例を次に示します:
from httpx import AsyncClient from fastapi import FastAPI, Request app = FastAPI() @app.on_event("startup") async def startup_event(): app.state.client = AsyncClient() @app.on_event('shutdown') async def shutdown_event(): await app.state.client.aclose() @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))
この例では:
async def でエンドポイントを定義したくない場合は、httpx の同期 API を選択しますが必要になります。このアプローチにより、スレッドの安全性が維持され、エンドポイントの実装が簡素化されます。
from httpx import Client from fastapi import FastAPI, Request app = FastAPI() @app.on_event("startup") def startup_event(): app.state.client = Client() @app.on_event('shutdown') async def shutdown_event(): await app.state.client.aclose() @app.get('/') def home(request: Request): client = request.state.client req = client.build_request('GET', 'https://www.example.com') try: r = client.send(req) content_type = r.headers.get('content-type') except Exception as e: content_type = 'text/plain' e = str(e) if content_type == 'application/json': return r.json() elif content_type == 'text/plain': return PlainTextResponse(content=r.text) else: return Response(content=r.content)
この例では、同期 API は try/Except ブロック内で HTTP リクエストを処理し、リクエスト中に発生する可能性のある例外を適切に処理できるようにします。
httpx とその機能を活用することで、 FastAPI 内でダウンストリーム HTTP リクエストを自信を持って行うことができ、複数の同時タスクをシームレスに処理し、アプリケーションの安定性を確保できます。
以上がhttpx はどのようにして FastAPI でのダウンストリーム HTTP リクエストを安全かつ効率的に強化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。