인프런 커뮤니티 질문&답변

박희진님의 프로필 이미지
박희진

작성한 질문수

Airflow 마스터 클래스

@task 데코레이터 사용하기

task 데코레이터 사용시 궁금증이 있습니다.

작성

·

261

0

task 데코레이터를 사용하면서부터 함수호출값을 받게 변경되는 점이 궁금합니다.

 

변경 전

def foo():
    ...

py_task = PythonOperator(
          python_callable=foo)

변경 후

@task(task_id='py_task')
def foo():
    ...

py_task = foo()

 

변경 후에는 foo라는 함수원형을 입력하는 것이 아니라 함수를 호출하게 되는데 데코레이터로 감쌌기 때문에 괜찮아지는 건가요?

답변 1

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 희진님!

네, 질문하신 내용이 맞습니다.

데커레이터로 감싸여진 함수을 호출하면 데커레이터의 효과가 나타납니다.

@task 데커레이터는 감싸고 있는 함수를 호출하면 그 리턴값으로 어떤 airflow의 task 객체가 되게끔 합니다.

그런데 task1 = PythonOperator(task_id='xxx') 와 같이 고전적으로(?) 만든 task1 객체와는 조금 다른 객체에요.

 

강의에서 다루지만 @task 데커레이터로 만들어진 객체는 함수의 리턴값을 Xcom에 저장하기도 하고 다른 객체가 리턴한 값을 Xcom에서 찾아오는 기능도 갖춘 조금 특별한 객체인 셈이죠.

 

이해되셨을까요?

박희진님의 프로필 이미지
박희진
질문자

친절한 답변 감사드립니다 ㅎㅎ

대충 이해했습니다 @task 데커레이터가 정확하게 어떻게 구현되어있는지를 알 수 없어 일단은 넘어가고 강의를 다 듣고 나서도 궁금하면 그 때 airflow에서 코드를 자세하게 찾아보면 될거 같습니다

감사합니다!

박희진님의 프로필 이미지
박희진

작성한 질문수

질문하기