Python (101) 썸네일형 리스트형 Python: name mangling 된 메소드 오버라이딩 # __method # Python 클래스에서 언더바 두개가 붙는 메소드는 private하게 취급이 된다. class Base: ... def __test_method(self) 와 같이 선언된 __test_method의 경우, 메소드 명이 변경되는 name mangling이 일어난다.name mangling이 되면 __test_method로 선언한 명칭이 변경이되기 때문에,Base를 상속받은 다른 클래스에서 __test_method라고 메소드 선언을 해도 오버라이딩이 일어나지 않는다. 이와 같이, 다른 곳에서 쉽게 오버라이드 되지 않도록 일종의 예방 차원에서 __ 형태를 쓸 수 있다. 그렇지만 외부라이브러리 등을 사용하는 경우에 name mangling된 메소드를 오버라이드 할 상황이 생긴다.(예를 들어 특정 wa.. 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들이 .. 이전 1 2 3 4 5 ··· 13 다음