fastapi는 멀티 쓰레드, 멀티 프로세스, 비동기 시스템 모두 지원함.
def
만 이용해 작성한 함수는 동기적으로 동작한다. 이때는 기본적으로 멀티 쓰레드를 이용하게끔 구현되어 있다.
여기에 async
를 붙이면 비동기식으로 동작한다. uvicorn내부에 uv루프라는 이벤트 루프가 있어서, async
가 붙은 함수들은 실행시 이 이벤트 루프에 등록된다. 이벤트 루프가 해당 비동기가 완료되면 콜백을 트리거시켜주는 역할까지 진행하려면, await
키워드를 붙여야만 한다.
CPU가 멀티 프로세스를 지원해야 한다. 만약 가능하다면 uvicorn이 워커라는 개념을 도입해 멀티 프로세스 코어별로 이벤트 루프와 멀티쓰레드를 지원하게 해준다.
uvicorn 가동시 --workers=
옵션을 준다.
uvicorn main:app --workers=4 --port=8081
이러면 프로세스를 4개 활용한다는 것임.