从SubDAG KeyError提取xcom

时间:2019-05-22 04:41:25

标签: airflow airflow-scheduler

我正在尝试从子dag中拉出xcom,但无法承受,因为它向kwargs['ti']抛出了KeyError

import airflow
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from airflow.operators.subdag_operator import SubDagOperator

args = {
    'owner': 'airflow',
    'start_date': airflow.utils.dates.days_ago(2),
    'provide_context': True,
}

dag = DAG('example_xcom', schedule_interval="@once", default_args=args)

value_1 = [1, 2, 3]
value_2 = {'a': 'b'}


def push_by_returning(**kwargs):
    """Pushes an XCom without a specific target, just by returning it"""
    return value_2


def puller(**kwargs):
    ti = kwargs['ti']

    # get value_2
    v2 = ti.xcom_pull(task_ids='push_by_returning')
    assert v2 == value_2

    dag_subdag = DAG(
        dag_id='%s.%s' % ('example_xcom', 'puller'),
        default_args=args,
        schedule_interval='@once',
    )

    start = DummyOperator(
        task_id='start',
        default_args=args,
        dag=dag_subdag,
    )

    end = DummyOperator(
        task_id='end',
        default_args=args,
        dag=dag_subdag,
    )

    start >> end


push = PythonOperator(
    task_id='push_by_returning',
    dag=dag,
    python_callable=push_by_returning,
)

pull = SubDagOperator(
    task_id='puller',
    subdag=puller(),
    default_args=args,
    dag=dag,
)

push >> pull

是否可以从SubDagOperator中拉出?谢谢。 我已经尝试过kwargs ['task_instance'],但还是买不起。

0 个答案:

没有答案