2023년 8월 8일 화요일

[FastAPI] uvicorn, hypercorn에서 worker 여러개 띄우기 (feat. 배드민턴 셔틀콕 추천)

안녕하세요. 클스 입니다.

오늘은 FastAPI에 여러개 worker를 실행하는 것을 해보려고 합니다.

많은 요청을 처리하기 위해서 worker를 해주면 좋습니다.

worker의 계산은  2 x number_of_cores +1 이 적절하다고 합니다.


좀더 정확하게 산출해보려면 아래와 같이 계산하면 됩니다.

number_of_workers = number_of_cores x num_of_threads_per_core + 1
MacOS의 터미널에서 
$ sysctl -n hw.packages   ==> MacOS에 장착된 cpu socket 수
$ sysctl hw.physicalcpu hw.logicalcpu ==> cpu의 core 수, 총 thread 수
   num_of_threads_per_core(core당 thread 수) = hw.logicalcpu / hw.physicalcpu

$ sysctl -n hw.ncpu  혹은  ==> core 수
$ sysctl -n machdep.cpu.thread_count ==> core 수

uvicorn과 hypercorn으로 실행하는데 --reload 옵션이 있으면 --workers는 무시되고 1개만 뜹니다.

그리고 reload process가 1개 실행 됩니다.


참고로 FastAPI 공식 문서에서는 worker를 띄울때는 uvicorn 보다는 gunicorn을 사용하는게 좋다고 합니다.

그래서 저는 hypercorn을 많이 사용합니다.


# uvicorn

```sh
$ APP_ENV=dev uvicorn app:app --host "0.0.0.0" --port "8001" --reload
$ APP_ENV=dev uvicorn app:app --host "0.0.0.0" --port "8001" --workers 4
```

# hypercorn

```sh
$ APP_ENV=dev hypercorn app:app --bind 0.0.0.0:8001 --reload
$ APP_ENV=dev hypercorn app:app --bind 0.0.0.0:8001 --workers 4
```

* 4개를 실행한 결과 입니다.

INFO:     Started server process [91202]

INFO:     Waiting for application startup.

INFO:     Started server process [91203]

INFO:     Waiting for application startup.

INFO:     Started server process [91204]

INFO:     Waiting for application startup.

INFO:     Started server process [91201]

INFO:     Waiting for application startup.

INFO:     Application startup complete.

INFO:     Application startup complete.

INFO:     Application startup complete.

INFO:     Application startup complete.


======== 저는 배드민턴을 좋아하는 클스 입니다. =========

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


아래를 눌러서 구매 부탁드립니다.


강산연 501 배드민턴 셔틀콕, 화이트, 12개입, 1개 샌디스크 울트라 듀얼 C타입 Type c OTG겸용, 128GB

라벨: , , , , , , , , ,