Python (100) 썸네일형 리스트형 Python: 동기, 비동기 함수 여부에 상관없이 실행하기 # inspect.iscoroutinefunction 함수를 인자로 받아서, 해당 함수가 동기, 비동기 중 어떤 방식으로 선언되어 있는지는 먼저 판단하고,거기에 맞게 함수를 실행하면 된다. 파이썬 내장 라이브러리인 inspect 내의 iscoroutinefunction 함수를 이용 함수명 대로, coroutine 여부를 판단해준다 async가 붙은 함수: is coroutine function? yes -> inspect.iscoroutinefunction(func): True async 붙지 않은 함수: is coroutine function? no -> inspect.iscoroutinefunction(func): False 예제 코드import inspectimport asynciodef is_async_function(func): re.. FastAPI + SQLAlchemy: DB Connection이 지속적으로 생기는 문제 FastAPI는 일반적으로 SQLAlchemy와 함께 사용하며,다수의 커넥션풀을 유지하기 위해서 QueuePool을 사용한다.(비동기 데이터베이스 라이브러리 사용시에는 QueuePool이 아닌 async에 맞는 풀 사용)# database.pyfrom sqlalchemy import create_enginefrom sqlalchemy.pool import QueuePoolfrom sqlalchemy.orm import sessionmakersync_engine = create_engine( SYNC_DATABASE_URL, poolclass=QueuePool, pool_size=20, max_overflow=5, pool_timeout=30, pool_recycle=360.. aiohttp: async requests code example install: pip install aiohttp 다수의 request를 비동기적으로 요청하기 (예제에서는 1000번) - put 요청 기준 - post도 동일한 방식 (메소드만 put -> post 변경) import aiohttpimport asyncioasync def send_put_request(session, url, data, headers): async with session.put(url, json=data, headers=headers) as response: return response.status, await response.text()async def main(url, data, headers): async with aiohttp.ClientSession.. FastAPI + SQLAlchemy: connection pool log 찍기 # Pool 커스텀 https://github.com/Junanjunan/g6/commit/709b910470c6c216f5e7d5870f1403095b7ef44e 로그 생성용 커스텀 커넥션 풀 설정 · Junanjunan/g6@709b910Junanjunan committed May 3, 2024github.com FastAPI + Pydantic: 데이터 검증 ORM-DTO # model_validate # from_attributes FastAPI에서 데이터 검증을 위해 Pydantic을 주로 사용. Pydantic을 통해 검증을 하는 과정에서 ORM 객체를 DTO로 변환하는 과정을 살펴보자. 1. FastAPI의 request body와 response model request에서 어떠한 속성을 받을것인지는 router함수 안에 Body를 통해 정의. * 예시코드 from fastapi import APIRouter, Body router = APIRouter() @router.post("/test") async def api_test( name: str = Body(...) ) pass * Pydantic으로 모델 클래스를 만들어서 데이터 검증을 거치고, Depends로 의존성함수를 주입해서 관리할 수 있다. (가독성, 독립성 유.. Python: None and False / False and None / None or False # bool 일반적인 프로젝트 내에서 None and False 라는 코드를 하드코딩으로 직접 작성하는 경우는 거의 없을 것이다. 그러나, 넘어온 변수가 의도치 않게 None으로 넘어온 경우 위와 같이 None and False 등의 상황이 벌어질 수 있다. 그리고 이 결과값을 변수로 받은 후에 로직 상에서 처리가 되는 경우 None이냐 False냐에 따라서 다르게 동작하기도 하고, 특히 Pydantic으로 데이터 타입을 검증할 때 에러가 발생하기도 한다. 1. None and False -> None False and None -> False ---> and 연산일 경우 단락평가(short circuit evaluation)에 따라서 None, False가 앞에 있으면 앞부분만 보고 판단 단, 그 판단된 결과가 무.. Python: class __slots__ __slots__ Python class에서 __slots__에 사용할 attributes를 명시하면, 해당 클래스로 생성되는 인스턴스는 __dict__, __weakref__ 를 갖지 않고 생성. 기본적으로 python에서 class의 인스턴스는 __dict__에 네임스페이스를 갖는데, __slots__가 __dict__ 대신 사용될 수 있다. 언제? 왜? 기본적으로 모든 인스턴스들은 __dict__에 딕셔너리 형태로 네임스페이스를 갖는다. 딕셔너리 형태로 가짐으로써, 인스턴스가 생성된 이후에 인스턴스 attributes들이 생성, 수정, 삭제가 가능하다. 그리고 각각의 인스턴스들이 생성, 수정, 삭제가 가능해야 하고, attirubtes들을 독립적으로 고유하게 가져야 하므로 모든 instance들이 .. FastAPI, Javascript: EventSource Example EventSource HTTP를 통해서 server-sent-events (SSEs)를 받기 위한 인터페이스 페이지 새로고침 없이 real-time(실시간)으로 서버에서 데이터를 받을 때 유용하게 쓸 수 있다. 아래는 오픈소스 g6의 데이터 베이스가 설치되는 과정에서 Python 코루틴을 활용하여 백엔드 FastAPI에서 프론트엔드 Javascript로 페이지 리로딩 없이 설치 정보를 전달하는 예제 @router.get("/process") async def install_process(request: Request): async def install_event(): db_connect = DBConnect() engine = db_connect.engine SessionLocal = db_connect.. 이전 1 2 3 4 5 ··· 13 다음