You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SimpleHttpOperator调用超30分钟API后任务状态未更新问题

Airflow SimpleHttpOperator长耗时API任务状态卡滞解决方案

根因定位

  • Airflow 2.1.2版本内置SimpleHttpOperator默认未适配超长耗时请求,任务运行超过30分钟后,会触发scheduler的僵死任务判定逻辑,scheduler会不再接收该任务的后续状态上报。
  • Docker Compose部署的Airflow默认配置的Celery任务时间限制、心跳阈值均针对短耗时任务设计,超过30分钟的长请求会导致worker与scheduler的心跳同步中断,即使API返回结果,状态也无法同步到scheduler。
  • 未给任务显式配置execution_timeout参数,默认的任务超时拦截逻辑会屏蔽长耗时任务的状态回调。

修复操作

1. 调整任务代码配置

给SimpleHttpOperator显式配置超时参数,示例如下:

from datetime import timedelta
from airflow.providers.http.operators.http import SimpleHttpOperator

long_api_task = SimpleHttpOperator(
    task_id="call_long_time_api",
    http_conn_id="your_http_conn_id",
    endpoint="/your/api/path",
    method="POST",
    # 配置执行超时,需大于API最大响应时长,此处以45分钟为例
    execution_timeout=timedelta(minutes=45),
    # 配置请求层超时,单位秒
    timeout=2700,
    do_xcom_push=True
)

2. 调整Airflow服务配置

修改docker-compose.yml中的环境变量配置,新增以下参数:

services:
  airflow-scheduler:
    environment:
      AIRFLOW__CORE__TASK_ACK_LATE: 'True'
      AIRFLOW__SCHEDULER__SCHEDULER_HEARTBEAT_SEC: 30
  airflow-worker:
    environment:
      AIRFLOW__CELERY__TASK_SOFT_TIME_LIMIT: 3600
      AIRFLOW__CELERY__TASK_TIME_LIMIT: 3900

修改完成后执行docker-compose up -d重启Airflow服务生效。

3. 长期优化方案

如果业务侧API响应时长普遍超过30分钟,建议改为异步轮询模式实现:先用Operator提交API请求拿到任务标识,再用HttpSensor定时轮询任务执行结果,避免worker进程被长请求长期占用,从根本上避免状态卡滞问题。

内容的提问来源于stack exchange,提问作者Jarno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:18:01