>백엔드 개발 >파이썬 튜토리얼 >동시 대 병렬: FastAPI는 요청을 어떻게 처리합니까?

동시 대 병렬: FastAPI는 요청을 어떻게 처리합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 20:35:10139검색

Concurrent vs. Parallel: How Does FastAPI Handle Requests?

FastAPI의 동시 요청과 병렬 요청

FastAPI에는 비동기 def 엔드포인트가 항상 요청을 실행하지 않는 이유에 대한 일반적인 오해가 있습니다. 평행한. 이 동작은 FastAPI의 설계로 인해 발생한 것이 아니라 FastAPI가 비동기 프로그래밍을 활용하는 방식과 관련이 있습니다.

def 엔드포인트를 사용할 때 FastAPI는 이를 별도의 스레드에서 동기식으로 실행하여 동시성을 활성화합니다. 그러나 async def 엔드포인트는 일반적으로 이벤트 루프에서 직접 실행되어 코드가 비동기 I/O 작업과 상호 작용할 때 동시성과 병렬성을 모두 보장합니다.

FastAPI의 동기 코드와 비동기 코드

FastAPI는 async def를 통해 비동기 코드를 지원합니다. 이를 통해 제어가 Wait를 사용하여 이벤트 루프로 다시 전달될 수 있습니다. 이 기능을 사용하면 클라이언트의 데이터나 데이터베이스 응답을 기다리는 등의 비차단 작업이 가능해집니다. 그러나 time.sleep()과 같은 동기 작업이 async def 엔드포인트 내에서 사용되면 이벤트 루프와 궁극적으로 서버를 차단하여 요청이 순차적으로 처리됩니다.

외부 스레드 풀

차단 작업이 이벤트 루프를 방해하지 않도록 하기 위해 FastAPI는 별도의 스레드에서 def로 정의된 작업을 실행하는 외부 스레드 풀을 사용합니다. 이벤트 루프 실행을 재개하기 전에 이를 기다립니다. 이 접근 방식은 진정한 병렬화가 아니더라도 def 엔드포인트에 대한 동시성을 달성합니다.

모범 사례

  • 비동기 작업을 기다려야 하는 엔드포인트에는 async def를 사용하세요.
  • 비차단 I/O와 상호작용하지 않거나 단순 포함 엔드포인트에는 def를 사용하세요.
  • Starlette의 run_in_threadpool() 함수를 활용하여 비동기 def 엔드포인트에 대해 별도의 스레드에서 차단 작업을 실행합니다.
  • 실행 유연성을 높이는 loop.run_in_executor()와 같은 asyncio 메서드를 사용해 보세요. 동기식 작업을 비동기식으로 처리합니다.
  • Celery나 과도한 백그라운드 계산을 위한 AsyncIOScheduler.

위 내용은 동시 대 병렬: FastAPI는 요청을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.