문제 설명:
FastAPI는 병렬 기능을 제공하지만 API 여러 브라우저 탭을 통해 동시에 이루어진 호출은 병렬이 아닌 순차적으로 처리됩니다. 이 동작은 async def가 아닌 def로 엔드포인트를 정의할 때 발생합니다.
분석 및 솔루션:
FastAPI는 외부 스레드 풀을 활용하여 def로 정의된 엔드포인트를 처리합니다. 이러한 엔드포인트가 요청을 받으면 FastAPI는 스레드 풀과 별도의 스레드에서 요청을 실행합니다. 그러나 한 번에 하나의 요청만 처리할 수 있으므로 진정한 병렬 처리가 아닌 순차적 요청 처리가 이루어집니다.
반대로 async def로 정의된 엔드포인트는 기본 이벤트 루프에서 직접 실행되므로 진정한 병렬 요청 처리가 가능합니다. . 이는 비동기 def 엔드포인트 내의 대기 호출이 비동기 작업을 기다리는 동안 이벤트 루프의 다른 작업을 양보하기 때문입니다.
문제를 해결하려면 I/O 바인딩 작업 차단이 필요하지 않은 엔드포인트가 정의되었는지 확인하세요. FastAPI의 병렬 기능을 활용하려면 async def를 사용하세요. 다음은 병렬로 실행할 수 있는 엔드포인트의 예입니다.
@app.get("/ping") async def ping(request: Request): print("Hello") await asyncio.sleep(5) print("bye") return {"ping": "pong!"}
추가 정보:
위 내용은 내 FastAPI 애플리케이션이 동시 요청을 병렬이 아닌 순차적으로 처리하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!