ホームページ >バックエンド開発 >Python チュートリアル >すべての FastAPI エンドポイントでグローバル オブジェクトを効率的に初期化して再利用するにはどうすればよいですか?
初期接続が必要な通知クライアントを作成する場合、パフォーマンスの遅延を避けるために、すべてのエンドポイントでそれを利用する効率的な方法を見つけることが重要です。このシナリオに対処するために考えられる 2 つのアプローチを紹介します。
app.state 属性を使用すると、カスタム クラス オブジェクトを保存できます。メインファイルの外側。これにより、APIRouter を使用するサブモジュールを操作する場合でも、Request オブジェクトを通じて通知クライアントにアクセスできるようになります。現在は非推奨となった起動イベントまたはライフスパン関数を使用してオブジェクトを初期化できます。
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): app.state.n_client = NotificationClient() yield app.state.n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.app.state.n_client # ...
Starlette のライフスパン ハンドラーの導入により、オブジェクトの初期化と使用法を request.state 内で管理できるようになりました。このハンドラーは、起動およびシャットダウン機能も提供します。初期化されたオブジェクトを状態ディクショナリに追加すると、request.state を使用してエンドポイント内でアクセスできるようになります。
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): n_client = NotificationClient() yield {'n_client': n_client} n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.state.n_client # ...
どちらのアプローチでも効果的な効果が得られます。 FastAPI エンドポイントでグローバル オブジェクトまたは変数を再利用するソリューション。特定のアプリケーションに最適なオプションは、特定の要件とアーキテクチャによって異なります。
以上がすべての FastAPI エンドポイントでグローバル オブジェクトを効率的に初期化して再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。