기본 콘텐츠로 건너뛰기

8월, 2023의 게시물 표시

[FastAPI] pydantic 에서 pydantic.errors.PydanticImportError: `BaseSettings` has been moved to the `pydantic-settings` 해결[SOLVED]

pydantic migration v1.x to v2.x 오류 해결 안녕하세요. 클스 입니다. FastAPI를 이용해서 kakao 로그인을 구현하고자 했습니다. poetry add 'pydantic[ 'email' ]' 설치를 했습니다. 그랬더니 v1.x --> v2.2로 업그레이드 되면서 기존에 동작하던 configs.py 에서 아래와 같은 오류가 발생했습니다. pydantic.errors.PydanticImportError: `BaseSettings` has been moved to the `pydantic-settings` 해결[SOLVED] [원인] from pydantic import BaseSettings 이 v2.x가 되면서 pydantic-settings로 이동되었다는겁니다. [해결] $ poetry self update  [선택사항] $ poetry add 'pydantic[email]'    $ poetry add 'pydantic-settings' 설치 합니다. $ poetry update  [선택사항] configs.py 소스에서 아래와 같이 수정하면 됩니다. from asyncio import streams # from pydantic import BaseSettings, Field # DELETE from pydantic_settings import BaseSettings # NEW from pydantic import Field class DefaultSettings ( BaseSettings ): APP_ENV: str APP_NAME: str APP_DESCRIPTION: str APP_VERSION: str APP_BUILD_NO: int 그리고 pydantic에서 local.env 파일을 설정할때 문자, 숫자에 대한 강력한 validation을 합니다. [local.env 기존]에는 문자든 숫자든 상관없이 알아서 해줬...

[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 --...