Skip to content

Instantly share code, notes, and snippets.

@sigridjineth
Created November 30, 2023 01:40
Show Gist options
  • Save sigridjineth/79127bda9586f8d45f7d50d468ed2c63 to your computer and use it in GitHub Desktop.
Save sigridjineth/79127bda9586f8d45f7d50d468ed2c63 to your computer and use it in GitHub Desktop.
fastapi

image

FastAPI와 Uvicorn의 동작 방식

  • FastAPI는 ASGI 프레임워크 중 하나로, 비동기적으로 작동하는 uvicorn과 함께 사용된다.
  • 구조는 FastAPI - Starlette - Uvicorn - uvloop - libuv 순으로 이루어져 있다.

비동기 처리의 중요성

  • Python에서는 Global Interpreter Lock(GIL)을 사용하여 race condition을 방지한다.
  • 이는 멀티스레딩을 제대로 지원하지 않지만, uvicorn은 비동기 처리를 위해 멀티 프로세싱 방식을 사용한다.
  • 이렇게 실행된 여러 개의 프로세스는 각각 독립적으로 요청을 처리한다.

CGI, WAS, WSGI, ASGI

  • CGI는 웹서버가 작성된 프로그램을 실행하기 위한 인터페이스로, 프로세스를 생성하여 실행한다.
  • 반면, WAS는 쓰레드를 사용합니다. WSGI는 웹 서버와 웹 프레임워크 사이에서 요청을 받고 응답을 주는 역할을 한다.
  • ASGI는 WSGI의 단점인 비동기 처리의 어려움을 해결하는 솔루션읻.
  • Uvicorn은 libuv를 기반으로 하는 ASGI 웹 서버입니다. 이는 요청을 받고 처리한 후 libuv의 이벤트 루프에 등록하여 응답하는 역할을 한다.

async def와 def의 차이

  • FastAPI에서는 비동기 처리 라이브러리를 사용할 경우 async/await를 사용하고, 그렇지 않은 경우에는 def를 사용하는 것이 권장된다.
  • 이는 실행 방식에 따른 차이에서 기인하는데 async def는 fastapi 쓰레드 풀에서 생성되며 def는 메인 쓰레드를 사용한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment