본문 바로가기
반응형

PYTHON78

Python - HTTPX/Requsets Connection reset by peer 문제 해결하기 Connection reset by peer 오류는 서버와의 연결이 끊어졌을 때 발생하는 일반적인 오류이다. httpx에서 이 오류가 발생하는 경우 다음과 같은 몇 가지 해결 방법을 시도해 볼 수 있다. 여기에서는 HTTPX 를 이용하지만, Requests 라이브러리에서도 동일하게 조치가 가능하다. 서버 환경 설정등 확인해야 할 것이 많지만, 기본적으로 확인해야 하는 요소는 다음 3가지이다. timeout keep-alive 연결 재시도 1. 연결 시간 제한 확인 timeout 매개변수를 사용하여 연결 시간 제한을 늘리면, 서버가 처리하지 못하는 상황에 보다 대기시간을 가져서 처리를 할 수 있다. httpx import httpx client = httpx.Client(timeout=10) # 연결 시간.. 2024. 2. 20.
Python - SQLAlchemy로 row 업데이트(update) 방법 3가지 SQLAlchemy로 row 업데이트하는 방법 으로 여기에서는 많이 사용되는 3가지 방법에 대해서 정리해 본다.. 1. update() 함수 사용: update 함수는 Metadata를 이용해서 테이블 정보를 가져오는 경우 사용할 수 있다. from sqlalchemy import update # 업데이트할 테이블 선택 table = User # 업데이트 조건 설정 where_clause = table.c.id == 1 # 업데이트할 값 설정 values = {"name": "새로운 이름"} # 업데이트 쿼리 실행 session.execute(update(table).where(where_clause).values(values)) session.commit() 2. Model 객체 수정: 이는 모델 구조.. 2024. 2. 19.
Python - SQLAlchemy 검색 결과 (exists/ not exists)있는지/없는지 확인 from sqlalchemy import exists query = session.query(User).filter(User.name == "John Doe") if query: # 검색 결과가 있으면실행 print("검색 결과가 있습니다.") if not query: # 검색 결과가 없으면 실행 print("검색 결과가 없습니다.") 다음은 SQLAlchemy에서 검색 결과가 있는지 혹은 없는지에 따라서 처리해야 하는 상황에 사용하는 방법 몇가지를 여기에 정리해 본다. 1. first() 또는 one() 메서드 사용 first() 또는 one() 메서드는 쿼리 결과의 첫 번째 행을 가져옵니다. 결과가 없으면 예외를 발생시킵니다. 다음과 같이 사용할 수 있습니다. from sqlalchemy.orm im.. 2024. 2. 19.
Python - Uvicorn/Gunicorn Connection reset by peer를 해결할 수 있는 방법 "Connection reset by peer" 오류는 서버와 클라이언트 간의 연결이 클라이언트 측에서 예기치 않게 종료되었음을 나타낸다. 이는 다양한 원인으로 인해 발생할 수 있으며, 클라이언트 측에서 해결할 수 있는 경우도 있다. "connection reset by peer" 오류가 발생하는 경우 여러 가지 원인이 있을 수 있다. 가장 일반적인 원인은 다음과 같다. 클라이언트 연결 끊김: 클라이언트가 요청을 완료하기 전에 연결을 끊으면 이 오류가 발생할 수 있다. 서버 과부하: 서버가 너무 많은 트래픽을 처리하느라 바쁜 경우 클라이언트 연결을 끊을 수 있다. 네트워크 문제: 네트워크 문제로 인해 클라이언트와 서버 간의 연결이 끊어질 수 있다. 코드 버그: 응용 프로그램 코드에 버그가 있으면 이 오류.. 2024. 2. 19.
Python - Fastapi Long/slow Task timeout kill 해결 방안 FastAPI를 이용해서 Long/slow Task를 이용할 경우 많이 활용하는 방법은 바로 BackgroundTasks 기능을 활용하는 방법이다. 대부분의 경우 유용하게 add_task 만으로 별도의 작업을 관리할 수 있기 때문에 많이 유용하다. from fastapi import BackgroundTasks app = FastAPI() @app.post("/long-task") async def long_task(background_tasks: BackgroundTasks): # Long/Slow Task를 백그라운드에서 실행 background_tasks.add_task(do_long_task) async def do_long_task(): # Long/Slow Task를 수행하는 함수 ... 참고.. 2024. 2. 19.
Python - Datetime 날짜 문자열 변환 strftime() 활용 날짜는 여러가지로 활용하는 요소가 많다, 특히 다른 데이터 형태로 활용해야 하는 경우 날짜를 원하는 문자열로 변경해서 활용하는것이 가장 많이 사용되는 방식으로 datetime에서 제공하는 문자열 변환 함수 strftime에 대해서 알아보도록 하자. strftime을 이용하면 datetime의 값을 문자열로 변경할 수 있으며, 변환시 사용할 수 있는 주요 메소드는 다음과 같다. 메소드 마다 특정 자리로 고정되어 있으며, 값이 없는 경우 0으로 표현하도록 되어 있다. 10진수 표기 - 2자리 %d : 날짜 표시 %m : 월 표시 %y : 년도 표시 %H : 24시간 표기 %I : 12시간 표기 %M : 분 %S : 초 4자리 %Y : 년도 6자리 %f : 마이크로 초 (6자리) 사용시 주의할 점은 y는 대소.. 2022. 5. 10.
Python - directory check and create Python 하다보면 경로 체크를 해야하는 경우가 종종 발생한다. 아래와 같이 경로 체크를 진행하고 없을 경우 생성하도록 makedirs를 사용할 수 있다. import os path = './newdirectory/newfile' # 아래 경로가 있는지 확인하고 없을 경우 생성 if not os.path.exists(os.path.dirname(path)): os.makedirs(os.path.dirname(path)) os.path.dirname 를 이용하면, path 값에서 경로 정보만 가져와서 진행이 가능하다. 2022. 5. 9.
Python - List 추가 append/extend 이해 프로그램을 하다보면 기존 리스트에 새로운 리스트를 추가해야 하는 상황이 자주 발생한다. 리스트대 리스트를 추가할 때 보통 다른 언어에서는 리스트를 Foreach로 풀어서 기존 리스트에 append를 통해 합치는 작업를 진행하는게 보통인데 extend라는 Python 만의 독특한 기능을 제공한다. 그럼 append와 extend의 차이를 알아보도록 하자. append append는 많이 이용해보았듯이 List형 자료 구조에 자료를 추가할 수 있는 지시자이다. >>> test_list = ['a','b','c'] >>> test_list.append('d') >>> test_list ['a', 'b', 'c', 'd'] >>> 위 예제를 진행해보면, 아래 그림과 같이 기존 리스트 a b c에 d가 추가된 것.. 2022. 5. 3.
Python - 특별 메소드, 마술 메소드, 던더 메소드 이해 Python에서 가장 처음 느끼는 장점이나 특이한 점은 바로 특별 메소드 혹은 마술 메소드 또는 던더 메소드(Dunder, Double unber의 준말, 이하 던더 메소드)라고 불리우는 메소드라고 할 수 있겠다. 이 던더 메소드라는 것은 언더바(_) 두개로 감싼 함수를 의미하는데, Python에서 사전에 지정해 놓은 내장 함수를 사용자가 호출할 수 있다.일 예로 리스트의 개수를 계산해주는 len()라는 함수의 던더 메소드는 __len__() 이다. 일반적으로 일반 사용자가 이 던더 메소드를 직접 호출할 경우는 많지 않다. 그럼 여기에서 자주 사용되는 던더 메소드 예를 들어보도록 하겠다. __init__()는 클래스를 초기화하는 내장 함수이다. 아래는 5라는 값을 클래스에 넣을 경우 클래스 초기화 단계에.. 2022. 4. 28.
반응형