FastAPI의 동시 요청과 병렬 요청
FastAPI에는 비동기 def 엔드포인트가 항상 요청을 실행하지 않는 이유에 대한 일반적인 오해가 있습니다. 평행한. 이 동작은 FastAPI의 설계로 인해 발생한 것이 아니라 FastAPI가 비동기 프로그래밍을 활용하는 방식과 관련이 있습니다.
def 엔드포인트를 사용할 때 FastAPI는 이를 별도의 스레드에서 동기식으로 실행하여 동시성을 활성화합니다. 그러나 async def 엔드포인트는 일반적으로 이벤트 루프에서 직접 실행되어 코드가 비동기 I/O 작업과 상호 작용할 때 동시성과 병렬성을 모두 보장합니다.
FastAPI의 동기 코드와 비동기 코드
FastAPI는 async def를 통해 비동기 코드를 지원합니다. 이를 통해 제어가 Wait를 사용하여 이벤트 루프로 다시 전달될 수 있습니다. 이 기능을 사용하면 클라이언트의 데이터나 데이터베이스 응답을 기다리는 등의 비차단 작업이 가능해집니다. 그러나 time.sleep()과 같은 동기 작업이 async def 엔드포인트 내에서 사용되면 이벤트 루프와 궁극적으로 서버를 차단하여 요청이 순차적으로 처리됩니다.
외부 스레드 풀
차단 작업이 이벤트 루프를 방해하지 않도록 하기 위해 FastAPI는 별도의 스레드에서 def로 정의된 작업을 실행하는 외부 스레드 풀을 사용합니다. 이벤트 루프 실행을 재개하기 전에 이를 기다립니다. 이 접근 방식은 진정한 병렬화가 아니더라도 def 엔드포인트에 대한 동시성을 달성합니다.
모범 사례
위 내용은 동시 대 병렬: FastAPI는 요청을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!