Python 7

Fastify와 Python 서버 간 작업 처리

1. 서버 구조 개요이 시스템은 클라이언트 요청을 처리하기 위해 Fastify 서버와 Python 서버가 상호작용하며, 작업 요청과 결과를 처리하는 구조로 설계되었습니다.Fastify 서버:클라이언트로부터 요청을 받아 Redis 작업 큐에 작업을 등록.작업 결과를 기다렸다가 클라이언트에 반환.Python 서버:Redis 작업 큐에서 작업을 가져와 GPU 기반의 모델 추론을 실행.작업 결과를 Redis Pub/Sub 채널을 통해 Fastify 서버에 전달.Redis:작업 큐: Fastify와 Python 서버 간 작업 요청 및 처리 상태를 관리.Pub/Sub: Python 서버가 작업 결과를 Fastify 서버에 전달.스트림: 작업의 퍼포먼스 데이터를 기록.2. 시스템 초기화Fastify 서버Redis 초..

Projects 2024.11.27

Python으로 비동기와 멀티스레딩을 활용한 작업 관리 API 구축

이번 포스팅에서는 FastAPI를 기반으로, 이미지 스타일 학습 요청을 처리하는 API를 설계하면서, 비동기 프로그래밍과 멀티 스레딩을 어떻게 활용할 수 있는지에 대해 다뤄보겠습니다.프로젝트 개요이 프로젝트는 이미지 스타일 학습 작업 관리 API를 구현한 사례입니다. 유저는 이미지 스타일 학습 요청을 API로 보내고, 작업이 완료되면 학습된 스타일 모델을 받을 수 있습니다. 주요 기능은 다음과 같습니다:사용자가 학습 요청을 보내면 작업이 학습 대기열에 추가됩니다.백그라운드에서 대기열을 지속적으로 확인하고, 작업을 하나씩 처리합니다.학습은 별도의 스레드에서 실행되어 메인 이벤트 루프의 차단을 방지합니다.사용자는 학습 상태를 조회하거나 작업을 취소할 수 있습니다.사용 기술1. FastAPIPython 기반의..

Projects 2024.11.23

[API] 공공 데이터 포털에서 기상 데이터 받아오기

공공 데이터 포털에서 기상 데이터를 fetch 하는 방법에 대해 알아보겠습니다. 공공 데이터 포털은 기상 데이터 외에도 교육, 국토 관리, 공공 행정, 재정 금융, 산업 고용 등 우리나라의 많은 데이터들을 api 외에도 파일 데이터로 제공해주는 사이트입니다. https://www.data.go.kr/index.do 공공데이터 포털국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datasewww.data.go.kr 제가 필요한 데이터는 기상청_지상(종관, ASOS) 일자료 조회서비스입니다.https://www.data.go.kr/tcs/dss/selectApiDataDeta..

Projects/ClimaML 2024.11.04

[Python] 함수 파라미터 *args와 **kwargs

* (unpacking operator, 언패킹 연산자)의 역할*과 **은 단순히 변수 이름 앞에 붙는 기호가 아닌, 언패킹 연산자로 작동합니다. * : 위치 인자를 튜플로 모아줍니다.** : 키워드 인자를 딕셔너리로 모아줍니다.1. *args: 여러 개의 위치 인자 받기*args는 함수에 여러 개의 위치 인자를 넘길 때 사용합니다. *args로 받은 인자들은 튜플에 저장되며, 순서대로 접근할 수 있습니다.*args에서 'args'는 관례일 뿐 다른 이름을 사용해도 됩니다.def add_numbers(*numbers): result = 0 for num in numbers: result += num return resultprint(add_numbers(1, 2, 3)) #출력 6pr..

[Airflow] @task 데코레이터 사용하기

Airflow에서는 파이썬 함수를 간단히 데코레이터를 통해 task로 변환할 수 있는 @task 데코레이터를 제공합니다. 이를 통해 PythonOperator를 직접 정의하는 것보다 효율적이고 간결하게 DAG 내의 task를 작성할 수 있습니다.데코레이터(Decorator)란?데코레이터는 함수를 '감싸서' 기능을 추가하는 파이썬 기능입니다. 함수를 인자로 전달하거나 함수 내부에 함수를 정의하는 것이 가능하기 때문에, 함수를 쉽게 확장할 수 있습니다. @데코레이터명으로 사용하며, Airflow에서는 이를 활용해 task를 정의합니다. Airflow에서의 @task 데코레이터 활용하기Airflow의 @task 데코레이터를 사용하면, 파이썬 함수 정의만으로 손쉽게 task를 생성할 수 있습니다. 이는 Airf..

MLOps/Airflow 2024.10.31

[Airflow] Python Operator로 외부 모듈을 Import하는 방법

1. Python Operator와 모듈 경로 이해하기Airflow에서 PythonOperator를 사용해 작업을 정의할 때, 외부 함수가 필요하면 해당 모듈을 DAG 내에서 import할 수 있습니다. 이때 import 경로를 정확히 지정하는 것이 중요합니다.Python 경로 설정 기본 원칙실행 중인 Python 파일과 동일한 디렉토리에 있는 모듈은 자동으로 import됩니다.pip로 설치한 라이브러리들은 자동으로 sys.path에 포함됩니다.sys.path 변수에 경로를 추가해, Python이 모듈을 찾을 수 있도록 설정할 수 있습니다.Airflow의 기본 sys.path 구성Airflow는 dags와 plugins 폴더를 자동으로 sys.path에 포함합니다. 따라서 이 두 폴더에 외부 모듈을 배치..

MLOps/Airflow 2024.10.30

[Airflow]Python Operator

Airflow의 python operator는 파이썬 함수를 직접적으로 실행할 수 있도록 해주는 오퍼레이터이다.이를 통해 특정 로직을 처리하거나 데이터를 가공하는 파이썬 함수를 작성한 뒤, ETL 파이프라인을 통해 작업을 간편하게 실행할 수 있다.PythonOperator 예제1. Airflow DAG 설정from airflow import DAGfrom airflow.operators.python_operator import PythonOperatorfrom datetime import datetime# 간단한 Python 함수 정의def my_python_function(): print("Hello from Python Operator!")# Airflow DAG 정의with DAG( 'p..

MLOps/Airflow 2024.10.26