Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在气流中通过XComs将参数从PythonOperator传递到HttpSensor?_Python_Airflow_Apache Airflow - Fatal编程技术网

如何在气流中通过XComs将参数从PythonOperator传递到HttpSensor?

如何在气流中通过XComs将参数从PythonOperator传递到HttpSensor?,python,airflow,apache-airflow,Python,Airflow,Apache Airflow,我想发送一个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=H

我想发送一个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请求的选项后,我发现宏没有正确计算,而是发送了
{{ti.xcom\u pull('get\u index')}
。可能出了什么问题?我是否应该使用
HttpOperator
而不是
HttpSensor

我认为参数已被弃用,并且未被气流中的jinja模板引擎扫描。尝试使用request_params而不是params(这是一个字符串键/值对字典)。

如前所述,
params
中的jinja模板当前未被评估。我通过切换到
SimpleHttpOperatr
s并将模板放在
data
字段中解决了问题。

这并不能回答问题。一旦你有足够的钱,你将能够;相反@SirRufo实际上它回答了这个问题。在所描述的传感器中,它使用jinja表达式“{ti.xcom_pull('get_index')}”,气流永远不会将其作为jinja模板读取,因此不会被xcom的值替换。但是,如果params被重命名为request_params,则解释它并用xcom的值替换“{ti.xcom_pull('get_index')}}”。在我的机器上测试。我想并尝试的答案更像是一个建议,可以完美地作为一个评论,但不是一个合格的答案。