Python

sync gunicorn에서 사용하는 기본 worker type 하나의 worker당 하나의 process가 load된다. worker의 개수는 기본적으로 2~4 * (NUM_CORES)을 추천한다. application이 주로 cpu bound로 이루어진 경우 추천 cpu bound로만 이루어진 경우에는 thread의 개수를 늘리는 것이 GIL 때문에 오히려 성능을 악화시킬 수 있기 때문이다. 적용 방식 CPU 사용량과 requests 수를 감안해 process(worker) 수를 조정 너무 많은 process가 존재하면 context switching으로 인해 latency가 감소할 수 있다. request에 비해 process가 적으면 동시에 처리할 수 있는 request가 적어 reverse pr..
Httpx fast API에서는 결국 최대한 I/O Blocking을 제거하고 asyn I/O를 수행하는 것이 관건 기존의 requests 모듈의 request 요청은 I/O blockiing이므로 fastAPI에서 사용하지 않는 것이 좋다. requests의 대체제로 **httpx** 모듈을 사용 httpx에서는 Client object를 사용해 requests를 전달하는 방식을 권장 AsyncClient를 fastAPI lifespan에서 초기화해서 사용 import httpx from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: F..
Fast API benchmark 2023-10-17 round 22 기준 JSON : JSON serialization - {"message":"Hello, World!"} 1-query : DB에 단일 행 조회 후 JSON 응답 - {"id":3217,"randomNumber":2149} 20-query : DB에 복수 행 조회 후 JSON 응답 - 동시성과 관련된 조금 더 복잡한 조건이 있음 Fortunes : DB에서 Unix fortune cookie 메시지가 포함된 모든 행(12개)을 가져와서 HTML 템플릿으로 응답 Updates : DB에 복수 행을 업데이트 - 행을 가져와서 메모리에 올리고 객체를 수정, 동시성 등 세부 조건 있음 Plain text : 일반 텍스트로 응답 - Hello,..
참고 [ python ] asyncio/coroutine/eventloop
multi threads(gthread) GIL은 오직 하나의 threads만이 코드를 실행할 수 있도록 하는 python 언어의 정책 각 Threads는 GIL이 걸려 있는 경우 코드를 실행하지 못 하고 suspeneded된다. 이때 특정 시간이 지난 후에는 다른 threads의 GIL을 release 후 강제로 가져올 수 있다. GIL을 release한 뒤에는 특정 시간 동안 wait를 해 다시 바로 GIL을 점유하거나 suspened되는 것을 방지 현재 수행 중인 threads에서 IO가 발생하면 GIL을 해제한다. Thread A가 GIL를 점유하여 코드 수행(A : running) Thread B는 GIL을 점유하려 했지만, 이미 점유 상태이기 때문에 suspend(B : suspended) T..
larcane
'Python' 태그의 글 목록