@shinyaz

FastAPI の async def で Strands agent() を呼ぶとハングする

Strands エージェントを FastAPI で HTTP API 化しようとして、最初に async def でエンドポイントを定義したらリクエストがハングした。

Python (NG)
@app.post("/invocations")
async def invoke(request: InvokeRequest):
    result = agent(request.prompt)  # ← ここでハング
    return {"response": result.message["content"][0]["text"]}

agent() はブロッキング呼び出しで、async def の中で実行するとイベントループ全体がブロックされる。def(同期関数)に変えるだけで解決する。

Python (OK)
@app.post("/invocations")
def invoke(request: InvokeRequest):
    result = agent(request.prompt)  # ← スレッドプールで実行される
    return {"response": result.message["content"][0]["text"]}

FastAPI は def で定義されたエンドポイントを外部のスレッドプールで自動実行するため、メインのイベントループをブロックしない。デプロイ編 第 1 回で詳しく扱っている。

共有する

田原 慎也

田原 慎也

ソリューションアーキテクト @ AWS

AWS ソリューションアーキテクトとして金融業界のお客様を中心に技術支援をしており、クラウドアーキテクチャや AI/ML に関する学びをこのサイトで発信しています。このサイトの内容は個人の見解であり、所属企業の公式な意見や見解を代表するものではありません。