인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

방효석님의 프로필 이미지
방효석

작성한 질문수

Airflow 마스터 클래스

Python Operator에서 Xcom 사용

xcom_pull 메서드 사용 질문

작성

·

206

0

안녕하세요

강의에서 xcom_pull 메서드 사용시 task_ids를 지정하지 않으면 가장 마지막 태스크의 키값을 가져온다고 하셨는데요, 실습코드를 돌려보니 먼저 실행되었던 태스크의 밸류값을 리턴합니다.

from airflow import DAG
import pendulum
from airflow.decorators import task

with DAG(
    dag_id="dags_python_with_xcom_eg1",
    schedule="30 6 * * *",
    start_date=pendulum.datetime(2024, 3, 1, tz="Asia/Seoul"),
    catchup=False,
) as dag:

    @task(task_id="python_xcom_push_task1")
    def xcom_push1(**kwargs):
        ti = kwargs["ti"]
        ti.xcom_push(key="result1", value="value_1")
        ti.xcom_push(key="result2", value=[1, 2, 3, 4])

    @task(task_id="python_xcom_push_task2")
    def xcom_push2(**kwargs):
        ti = kwargs["ti"]
        ti.xcom_push(key="reuslt1", value="value_2")
        ti.xcom_push(key="reuslt2", value=[1, 2, 3])

    @task(task_id="python_xcom_pull_task")
    def xcom_pull(**kwargs):
        ti = kwargs["ti"]
        value1 = ti.xcom_pull(key="result2")  # [1, 2, 3]
        value2 = ti.xcom_pull(
            key="result1", task_ids="python_xcom_push_task1"
        )  # value_1
        print(value1)
        print(value2)

    xcom_push1() >> xcom_push2() >> xcom_pull()

dag는 위와 같이 작성했고요, [1, 2, 3]이 반환될 것으로 기대했던 부분에서 [1, 2, 3, 4]가 반환되어서 혹시 제가 코드를 잘못 작성한건지 궁금해서 여쭤봅니다

 

답변 2

1

방효석님의 프로필 이미지
방효석
질문자

앗 이런 결국 오타 문제였군요...;;

답변 감사합니다!

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

원래 오타는 본인은 잘 안보여요 ^^

그래도 효석님의 이런저런 시도가 참 좋습니다.

강의 내용만 따라하기보다, 이렇게 하면 어뗗게 되지? 저렇게 해보면 어떻게 나오지? 같은걸 스스로 해볼 때 더 많이 늘어요.

화이팅입니다

1

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

안녕하세요 방효석님!

두 번째 task에 오타가 있습니다.

key=reuslt1 --> resutl1

key=reuslt2 --> result2

로 수정해서 돌려보시겠어요?

 

방효석님의 프로필 이미지
방효석

작성한 질문수

질문하기