본문 바로가기
반응형

전체 글824

Python - 코루틴과 이벤트루프 이해 정리 코루틴이란!? 코루틴은 특정 함수의 루프등을 실행하다가 일시 정지하고 재개할 수 있는 구성 요소를 말한다. 쉽게 말해 필요에 따라 일시 정지할 수 있는 함수를 의미한다,. 코루틴을 사용하여 네트워크/디스크등 I/O 처리를 위해 대기하고 있을때, 이는 단순히 대기하는 작업을 기다리는 동안 다른 작업을 먼저 처리함으로써 CPU의 유휴 시간(Idle time)을 최소화 할 수 있기 때문 하나의 스레드안에서 최고의 효율을 끌어 낼 수 있다. 특히 파이썬은 GIL때문에 스레드하나를 동작할 때 효율을 극대화 할 수있게 된다. 코루틴을 얘기하면 이벤트루프(EventLoop)라는 용어가 함께 등장한다. 코루틴을 실제 관리하는 개념이 이벤트루프이다. 이벤트루프, EventLoop란? 이벤트루프는 코루틴을 하나의 테스크(.. 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 - GIL, 멀티 쓰레드(thread) vs 멀티 프로세스(multiprocessing, subprocess) Python 코드를 작성하다보면 시스템 I/O를 효과적으로 사용하는 병령 처리 프로세스를 고민하게된다. 병렬 처리란, 특정 Task를 동시에 실행함으로써 순차적으로 처리하는 기본 처리 프로세스 보다 이점을 가져갈 수 있다. 특히 HTTP와 같은 네트워크 요청이나 Disk등 시스템 자원을 사용하는 I/O 가 발생하는 경우 자원 I/O를 기다리지 않고 다른 Task로 실행할 수 있어 보다 효과적으로 프로세스를 처리할 수 있다. 그렇다면 Python에는 어떤 방식으로 병렬처리를 진행해볼 수 있을까? 필자가 생각하는 방안은 총 2가지 정도이다. 멀티 쓰레드(thread)를 사용하는 방법과 멀티 프로세스(process)를 사용하는 방법이다. 다만 이 멀티 쓰레드(thread)와 멀티 프로세스(process)를 시.. 2024. 3. 25.
Python - *args와 **kwargs 이해 파이썬은 참 편리한 언어이다. 여러가지 내부적으로 처리해주는 기능들이 있으면서도, 이러한 부분들이 개발자들이 사용하는데 크게 이질감이 있지 않다. 이렇게 개발자의 편의를 지원해주는 기능들을 매직 메소드라는 것이 있고, 그중에 *args와 **kwargs 역시 이러한 매직 메소드로 지원되는 기능인데 어떻게 활용 할 수 있는지에 대해서 간략히 정리해 본다. *args와 **kwargs 는 보다 쉽게 아스키로 표현된다고 할 수 있다. * 아스키 기호 하나: 값를 의미 ** 아스키 기호 두개: 사용하면 키가 있는 인자값을 의미 이 매직 메소드를 사용하기 유용한 곳은 어떠한 변수 값을 받을지 알 수 없는 경우에 여기에 값이 있는지를 확인해서 처리할 수 있기 때문에 유용하게 사용할 수 있다. *args(Arguem.. 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.
Python - FastAPI with CRUD application by pydantic FastAPI는 파이썬에서 사용할 수 있는 현재 가장 좋은 백엔드 프레임워크라고 할 수 있다. FastAPI는 다음과 같은 장점을 가지고 있다. 1. 각 함수는 비동기로 동작한다. 2. 백엔드를 작업하면 데이터 처리에 골치를 아픈 경우가 많다. FastAPI는 데이터 오류를 쉽게 처리할 수 있는 좋은 프레임워크 이다. Pydantic을 이용한 Json 값 오류를 쉽게 조치 할 수 있다. 세부적인 내용은 https://pydantic-docs.helpmanual.io/ 를 확인하기 바란다. 3. Swagger, Redoc를 기본적으로 제공한다 4. 파이썬에서 빠른 프레임 워크에 속한다. 아래 벤치마크 결과를 확인해보면, 다른 파이썬 웹 프레임워크 보다 휼륭한 속도를 가지고 있다. Round 19 resul.. 2024. 3. 25.
Python - FastAPI Relationship SQL data 처리 FastAPI를 이용해서 Relationship 데이터를 처리하면서 해당 부분만 요약해서 정리해 본다. 본 예시에서는 Post라는 본문에 관련있는 Account들을 나열하는 구조를 예시로 잡았다. 그리고 기본 프로그램의 구조는 아래와 같다. . └── crud.py ├── database.py ├── main.py ├── api.py └── schemas.py 이를 위해 Account와 Post에 대한 관계 테이블에 대한 Model을 정의 해야 한다. Post와 관련있는 Account를 참조하기 위해서 Account에 post_id라는 외례키 컬럼을 추가하였다. models.py from sqlalchemy import Boolean, Column, Integer, String, DateTime, Big.. 2024. 3. 25.
반응형