FastAPI는 병렬 방식 대신 직렬로 API 호출을 실행합니다
Q: FastAPI API 호출이 병렬이 아닌 직렬로 실행되는 이유는 무엇입니까?
A: FastAPI의 문서에 따르면 def를 사용할 때 경로 작업 함수를 정의하기 위한 async def 대신 직접 호출하는 대신 대기 중인 외부 스레드 풀에서 실행됩니다. 이는 서버 차단을 방지하기 위해 수행됩니다.
병렬 실행에 대한 추가 고려 사항:
비동기 def 및 def 엔드포인트:
-
async def: 함수가 직접 실행됨 이벤트 루프에서; 비차단 I/O 바인딩 작업을 기다리는 한 동시에 처리됩니다.
-
def: 함수는 외부 스레드 풀과 별도의 스레드에서 실행됩니다. 이벤트 루프 외부에서 실행되지 않는 한 순차적으로 처리됩니다.
차단 작업 사용:
비동기 def 엔드포인트에 차단 작업이 포함되어 있고 기다리지 않는 경우 완료되면 이벤트 루프가 차단되고 요청이 처리됩니다.
해결책:
- async def 대신 일반 def로 엔드포인트를 정의합니다(대기 가능한 작업이 없는 경우).
- FastAPI의 run_in_threadpool() 함수를 사용하여 별도의 차단 작업을 실행합니다. thread.
- 별도의 실행기나 스레드에서 차단 작업을 실행하려면 asyncio의 loop.run_in_executor() 또는 asyncio.to_thread()를 사용하세요.
기타 최적화 전략:
- 더 많은 일꾼을 사용하여 멀티 코어 CPU의 이점.
- 과중한 백그라운드 계산에는 Celery 또는 AsyncIOScheduler를 사용하는 것이 좋습니다.
위 내용은 FastAPI가 API 호출을 병렬이 아닌 직렬로 실행하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!