如何在同一DAG运行中(不是最新的)从其他任务实例中提取xcom值?

时间:2019-02-13 09:04:33

标签: airflow

我有3次DAG运行:

  1. DAGR 1在2019-02-13 16:00:00执行
  2. DAGR 2于2019-02-13 17:00:00执行
  3. DAGR 3在2019-02-13 18:00:00执行

X的任务实例DAGR 1中,我想获取任务实例Y的xcom值。我是这样做的:

kwargs['task_instance'].xcom_pull(task_ids='Y')

我希望从Y中的任务实例DAGR 1获得xcom的价值。相反,我来自DAGR 3

来自Airflow文档

  

如果为xcom_pull传递了一个字符串task_ids,则返回该任务的最新XCom值;否则,返回0。 ...

  1. 为什么气流xcom_pull返回最新的xcom值?
  2. 如果我想从同一DAG运行中退出怎么办?

2 个答案:

答案 0 :(得分:1)

这回答了您的问题[如何从同一DAG运行(不是最新的DAG)中的其他任务实例中提取xcom值? ]
参见下面的示例

t1 = SomeOperator(
        task_id='Your_t1_Task_ID',
        ...
        ...
        dag=dag)

    def get_records(**kwargs):
        ti = kwargs['ti']
        xcom = ti.xcom_pull(task_ids='Your_t1_Task_ID')
        string_to_print = 'Value in xcom is: {}'.format(xcom)
        #string_to_print holds that value, you can also print it in the logs
        logging.info(string_to_print)

    t2 = PythonOperator(
        task_id='records',
        provide_context=True,
        python_callable=get_records,
        dag=dag)

    t1 >> t2

答案 1 :(得分:0)