[Airflow] Python Operator 사용과 Python Decorator

2024. 7. 22. 15:02·Minding's Programming/Airflow
목차
  1. Python Operator
  2. 파이썬 데코레이터
  3. Task 데코레이터
728x90
반응형

Python Operator

 

파이썬 오퍼레이터: Airflow에서 Python 함수를 실행시키는 오퍼레이터로, 해당 클래스를 이용해 DAG을 만들면 파이썬 함수를 실행시키는 워크플로우를 생성할 수 있다.

 

1. 내부 함수 실행

# 내부에 직접 함수를 만드는 경우

from airflow import DAG
import pendulum
import datetime
from airflow.operators.python import PythonOperator
import random

with DAG(
    dag_id="dags_python_operator",
    schedule="30 6 * * *", # 매일 6시 30분 마다
    start_date=pendulum.datetime(2023, 3, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    def select_fruit(): # 랜덤으로 과일 리스트 중 하나를 출력하는 함수
        fruit = ['APPLE', 'BANANA', "ORANGE", "AVOCADO"]
        rand_int = random.randint(0,3)
        print(fruit[rand_int])

    py_t1 = PythonOperator(
        task_id = 'py_t1',
        python_callable = select_fruit
    )

    py_t1

 

2. 외부 함수 실행

# 외부 함수 import 해 실행하는 경우

from airflow import DAG
import pendulum
import datetime
from airflow.operators.python import PythonOperator
from common.common_func import get_sftp # airflow는 기본적으로 /plugins 폴더까지 path로 인식하기 때문에 그 아래 경로로 import 해줘야 함

with DAG(
    dag_id="dags_python_import_func",
    schedule="30 6 * * *", # 매일 6시 30분 마다
    start_date=pendulum.datetime(2023, 3, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    task_get_sftp = PythonOperator(
        task_id = 'task_get_sftp',
        python_callable=get_sftp # 짧은 문구를 출력하는 간단한 함수
    )

    task_get_sftp

위 글에서 주의해야할 점은 파이썬 함수를 Import할 때의 경로이다.

Airflow의 경우 파이썬 함수를 ./plugins 폴더 내에서 바로 찾기 때문에, plugins 폴더 아래부터 경로가 시작해야 한다.

 

ex) get_stfp 함수가 Airflow/plugins/common 폴더 안에 있는 경우

일반적인 파이썬 인터프리터의 경우: from Airflow.plugins.common .common_func import get_stfp

Airflow의 경우: common.common_func import get_stfp

 

이후 Airflow 서버에 git을 통해 올리게 될 경우

다음과 같이 잘 노출되는 것을 확인할 수 있다.

 

 

파이썬 데코레이터

 

파이썬 데코레이터는 '함수를 장식하다'라는 의미를 가지고 있는데, 원래의 함수를 감싸서 해당 함수 바깥에 추가 기능을 덧붙이는 방법이다.

 

'감싼다'라는 것은 파이썬의 아래와 같은 특징으로 설명할 수 있다.

  • 함수 안에 함수를 선언할 수 있다.
  • 함수의 인자로 함수를 전달하는 것이 가능하다.
  • 함수 자체를 리턴하는 것이 가능하다.

여기서 데코레이터는 기존에 함수를 직접 호출하는 부분을 수정할 필요없이 원래의 함수가 정의된 부분 바로 윗줄에 한 줄 추가하는 것만으로 해당 함수를 감쌀 수 있다.

# 데코레이터 적용 전 (함수를 호출하는 부분, 이 부분은 수정할 필요 없음)

get_data1()
get_data2()
get_data3()


# 데코레이터 적용 후 (로그를 남기는 outer_func 이라는 함수를 씌워줌)

@outer_func
def get_data1():
	print('함수를 실행합니다.')
    
@outer_func
def get_data2():
	print('함수를 실행합니다.')
    
@outer_func
def get_data2():
	print('함수를 실행합니다.')

 

 

Task 데코레이터

 

Task 데코레이터는 파이썬 함수를 정의하는 것만으로 쉽게 Task를 생성할 수 있는 기능을 말한다. DAG 파일에 PythonOperator를 불러올 필요없이 바로 task로 추가할 수 있다. 코드가 훨씬 간결해진다.

# 기존 방식
def python_func1():
	...
    
py_task_1 = PythonOperator (
	Task_id = 'py_task_1',
    python_callable=python_func1
)

py_task_1
# task 데코레이터 사용

@task(task_id='py_task_1')
def python_func1():
	...
    
py_task = python_func1()
728x90

'Minding's Programming > Airflow' 카테고리의 다른 글

[Airflow] Python Operator의 op_args, op_kwargs  (1) 2024.07.22
[Python] 파이썬 함수 파라미터 *args와 **kwargs  (0) 2024.07.22
[Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)  (0) 2024.07.19
[Airflow] Bash Operator로 쉘 스크립트 파일 실행하기  (0) 2024.07.19
[Airflow] DAG 내 task 연결하기 (순서 지정)  (0) 2024.07.19
  1. Python Operator
  2. 파이썬 데코레이터
  3. Task 데코레이터
'Minding's Programming/Airflow' 카테고리의 다른 글
  • [Airflow] Python Operator의 op_args, op_kwargs
  • [Python] 파이썬 함수 파라미터 *args와 **kwargs
  • [Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)
  • [Airflow] Bash Operator로 쉘 스크립트 파일 실행하기
Minding
Minding
Today's MindingMinding 님의 블로그입니다.
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬게임개발
    FastAPI
    KBO
    코딩테스트
    AWS
    파이게임
    django
    에어플로우
    칼만필터는어렵지않아
    메이저리그
    KalmanFilter
    넘파이
    데이터분석
    mlb stats api
    머신러닝
    딥러닝
    칼만필터는어렵지않아python
    게임개발
    파이썬
    django python
    MLB
    프로그래머스
    데이터 엔지니어
    Python
    칼만필터
    질롱코리아
    Airflow
    칼만필터는어렵지않아파이썬
    pygame
    야구
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Airflow] Python Operator 사용과 Python Decorator

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.