본문 바로가기
반응형

PYTHON72

Python - sys.exit(0) 과 sys.exit(1)의 차이 exit code OS에서는 해당 프로그램이 HTTP와 유사하게 처리 결과에 따른 오류로 종료되었는지 정상적으로 종료되었는지를 확인하는 Status Code가 있다. 이를 Exit Code라고 하면 1과 0으로 구분된다. exit 0 EXIT_SUCCESS, 작업 성공 exit 1 EXIT_FAILURE, 작업 실패 exit 1로 종료를 하게 되면, 시스템에 존재하는 Error Handler가 동작하게 된다. 프로그램 적으로 보면 Try/Catch 처럼 Catch로 보내게 된다. Python에서도 만약 import sys를 이용해서 종료를 할 수 있는데 이때 코드를 지정하여 종료가 가능하다. 만약 아래와 같이 1로 프로그램을 종료하게 되면, 오류로 인식하여 Error Handler가 동작한다. 다만 시스템 레벨이기 때문에.. 2024. 3. 25.
Python - Zombie Process 처리 timeout Python 프로그램을 하다보면 보통 서브 프로세스를 생성하는 경우가 발새한다. 이때 프로그램의 로직을 잘 작성하였다면, 좀비 프로세스가 생성되지 않는다. 하지만 복잡한 프로그램, 특히 다중 실행이 가능한 멀티 프로세스로 구사하다보면, 종종 문제를 만나게 되는 부분이 종료가 되지 않는 좀비 프로세스들이다. 이를 효과적으로 관리할 수 있는 방안이 무엇일까 고민해보면서 사용할 수 있는 timeout과 필자의 생각에 대해서 정리해본다. timeout Python에서 process를 생성하는 subprocess 라이브러리에서 wait 함수를 이용하여 아래와 같이 timeout을 지정할 수 있다. >>> import subprocess >>> from subprocess import TimeoutExpired >.. 2024. 3. 25.
Python - asyncio 코루틴 await 이해하기 asyncio란 파이썬 3.5 버전부터 지원하기 시작한 코루틴을 사용할 수 있도록 지원해주는 라이브러리이다. asyncio를 사용하기 위해선 함수 앞에 async를 붙여서, 코루틴으로 만들 수 있다. 그리고 코루틴을 사용하고자 한다면, 해당 로직 앞에 await을 붙이면 된다. 즉 await를 붙인 코드에 대해 I/O 대기 등이 있을 경우 다른 코드 라인을 실행하는 구조 이다. 이때 await 뒤에 오는 코드는 코루틴으로 작성된 코드여야 한다. 예를 들어 await 뒤에 time.sleep과 같이 사용한다면 스레드가 중단된다, 코루틴으로 동작하려면, asyncio.sleep을 사용해야 한다. 특정 모듈의 경우 await을 붙여도 코루틴으로 동작하지 않으므로 await 호환성 체크를 해보기 바란다.(Dja.. 2024. 3. 25.
Django 4.x 주요 기능 정리(4.0, 4.1, 4.2) Django 버전이 3.2 에서 4.x으로 올린지 거희 1년이 다되어 가고 있다. 곧 4.2가 나오면 LTS로 변경되므로 (Django의 경우 각 메이저 버전에서 x.2가 LTS 버전이다) 현재 3.x버전을 사용하고 있는 입장에서 4.x버전이 어떤 부분들이 좋아졌는지 중요한 부분들을 요약해 본다. 1. 타임존 관련된 기본 라이브러리 zoneinfo 사용 기존 Django의 기본 Timezone 라이브러리는 pytz 였다. 이를 Python 기본 라이브러리인 zoneinfo로 변경되었다고 한다. 이로써 zoneinfo의 다양한 기능을 기본적으로 사용할 수 있게되었다. pytz 은 Django 4.x까지는 같이 쓰이다가 5.0 부터는 제거된다고 하니 zoneinfo에 대해 의존성이 있는지 확인해보는게 좋갰다.. 2024. 3. 25.
Python - argument after * must be an iterable, not int Python에서 Thread를 활용할 경우 인자가 하나인데 INT로 값을 던져줄때 발생하는 문제이다. 원인은 인자를 리스트 형태로 건내줘야 하는데, 값이 하나인 경우 int를 받아주지 못해서 발생한다. 해결 할 수 있는 방법은 두가지로 리스트로 만들거나, 콤마를 마지막에 추가해주는것이다. 아래 다음과 같은 예제코드에서 수정하는 방법은 다음과 같다. from threading import Thread import time def thread_task(number): print('thread start', number) for x in range(1, 10): Thread(target = thread_task, args = (x,)).start() 콤마를 추가 Thread(target = thread_tas.. 2024. 3. 25.
Python - 멀티 쓰레드(thread) 이해 멀티 쓰레드는 GIL로 인해 자원 손실이 존재하지만 기본적으로 I/O 대기 시간을 이용해서 실행하는 구조라고 할 수 있다. Thread를 활용할 수 있는 방법은 threading 라이브러리를 이용할 수 있으며, 가장 기본적인 방법은 다음과 같다. from threading import Thread import time def thread_task(number): print('thread start', number) time.sleep(int(number)) print('thread end', number) start = time.time() for x in range(1, 10): thread = Thread(target = thread_task, args = [x]) thread.start() end .. 2024. 3. 25.
SQLAlchemy - QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00 최근 작업요청이 많아지는 것 같더니, 다량의 호출로 인해 Database 접근 오류가 발생하였다. 오류내용은 다음과 같다. QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00 (Background on this error at: https://sqlalche.me/e/14/3o7r) Error Messages — SQLAlchemy 1.4 Documentation Previous: Third Party Integration Issues Next: Changes and Migration Up: Home On this page: Error Messages Connections and Transactions DBA.. 2024. 3. 25.
Python - JSON 데이터 검색 및 불러오기(dumps, loads, items) >>> load_json_data.keys() >>> for json_key in load_json_data.keys(): ... print(load_json_data[json_key]) ... ('a', 'atest') ('b', ['{"b":"btest"}']) 최근에는 API간 통신을 JSON 형태로 진행하는 경우가 많은데, Python은 JSON 친화적인 언어라고 할 수 있다. Python에서 JSON을 어떻게 다루는지 간단히 알아보자. JSON 만들기(dumps) JSON 데이터를 생성하는 방법은 다음과 같이 중괄호를 이용하여 키를 지정하여 Value를 넣어주면 된다. >>> json_data = {} >>> json_data['a'] = 'atest' >>> json_data {'a': 'at.. 2024. 3. 25.
Python - Web Framework - Django, FastAPI 오늘은 Python Web Framework에서 많이 오르내리는 Django와 Fastapi에 대해서 간략히 비교해 보고자 한다. Django 2003년에 출시 되어 현재 가장 많은 인기를 누리고 있는 웹 프레임워크이다. Instagram, Youtube 에서도 사용중이라는 말 다했다. 장점 -Django는 보안부터 DRF(Django Rest Framework), ORM, 서드파티와의 연계 등 대부분의 기능 지원 -바로 사용할 수 있는 Migrate를 통한 편리한 admin패널 및 데이터베이스 제공 -거대한 커뮤니티와 상세한 문서 단점 -풀 프레임 워크를 지향하기 때문에 상대적으로 리소스 사이즈가 큰 편 -3.0 부터 ASGI(비동기 인터페이스)를 지원하지만 아직은 느린편 -Django ORM은 SQL.. 2024. 3. 25.
반응형