ホームページ >バックエンド開発 >Python チュートリアル >FastAPI が API 呼び出しを並列ではなく逐次実行するのはなぜですか?

FastAPI が API 呼び出しを並列ではなく逐次実行するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-27 20:24:10512ブラウズ

Why Does FastAPI Run API Calls Serially Instead of in Parallel?

FastAPI は API 呼び出しを並列ではなく直列で実行します

Q: FastAPI API 呼び出しは並列ではなく直列で実行されるのはなぜですか?

A: FastAPI のドキュメントによると、使用する場合、 async def の代わりに def を使用してパス操作関数を定義すると、直接呼び出されるのではなく、待機される外部スレッド プールで実行されます。これは、サーバーのブロックを防ぐために行われます。

並列実行に関する追加の考慮事項:

非同期 def と def エンドポイント:

  • async def: 関数イベントループ内で直接実行します。非ブロッキング I/O バインド操作を待機している限り、同時に処理されます。
  • def: 関数は、外部スレッド プールとは別のスレッドで実行されます。イベント ループの外で実行されない限り、シリアルに処理されます。

ブロック操作の使用:

非同期 def エンドポイントにブロック操作が含まれており、待機しない場合完了すると、イベント ループがブロックされ、リクエストが処理されます。

解決策:

  • 非同期 def ではなく通常の def を使用してエンドポイントを定義します (待機可能な操作がない場合)。
  • FastAPI の run_in_threadpool() 関数を使用して、ブロッキング タスクを別個に実行します。 thread.
  • asyncio のloop.run_in_executor() または asyncio.to_thread() を使用して、別のエグゼキュータまたはスレッドでブロッキング タスクを実行します。

その他の最適化戦略:

  • より多くのワーカーを使用して、マルチコア CPU。
  • 大量のバックグラウンド計算には Celery または AsyncIOScheduler の使用を検討してください。

以上がFastAPI が API 呼び出しを並列ではなく逐次実行するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。