我想发送一个HTTP请求,其参数取决于依赖Python可调用的结果。我正试图使用xcom来实现这个目的。简化示例:

def get_index():
  return 0

get_index = PythonOperator(
  task_id='get_index',
  python_callable=get_index,
  dag=dag)

http_request = HttpSensor(
  task_id='send_http_request',
  http_conn_id=HTTP_HOST,
  endpoint=ENDPOINT,
  params={
    "index": "{{ ti.xcom_pull('get_index')  }}"
  },
  dag=dag)

get_index >> http_request

不幸的是,在检查了HTTP请求的选项之后,我发现宏没有正确计算,而是发送了0。可能出了什么问题?我应该使用{{ ti.xcom_pull('get_index') }}而不是HttpOperator吗?

最佳答案

faeder所述,params中的jinja模板目前未进行评估。我通过切换到SimpleHttpOperatrs并将模板放在data字段中解决了这个问题。

关于python - 如何在Airflow中通过XComs将参数从PythonOperator传递到HttpSensor?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45840677/

10-13 02:07