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

Airflow调度器报错:datetime.timedelta与float无法比较

Airflow调度器TypeError错误排查思路

错误核心原因

从错误栈追踪可以明确:问题出在任务实例计算下次重试时间时,min(self.task.max_retry_delay, delay) 这行代码试图比较datetime.timedelta和float类型的值,导致类型不兼容错误。本质是某个任务的max_retry_delay参数被配置成了纯数字(float/int),但Airflow要求该参数必须是datetime.timedelta对象。

排查与修复步骤

  • 检查所有DAG任务的max_retry_delay配置:遍历所有DAG文件,找出所有设置了max_retry_delay的任务,确认配置值是否为timedelta类型(比如timedelta(hours=2)),而非纯数字(如2、3.5)。
  • 定位具体出错任务:如果DAG数量较多,可以查看调度器日志中报错前后的任务实例记录,或者直接搜索DAG文件中的max_retry_delay关键字,快速定位配置错误的任务。
  • 修正参数配置:将错误的数值配置替换为合法的timedelta对象,例如把max_retry_delay=2改为max_retry_delay=timedelta(hours=2),修改后记得重启Airflow调度器。
  • 版本兼容性检查:如果使用的是较旧的Airflow版本(如1.x系列),建议升级到2.x稳定版本,新版本对参数类型的校验更严格,能提前避免这类隐式错误。

完整错误栈追踪

回溯(最近的调用最后):
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", 第1275行, 在 _execute中
    self._run_scheduler_loop()
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", 第1377行, 在 _run_scheduler_loop中
    num_queued_tis = self._do_scheduling(session)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", 第1515行, 在 _do_scheduling中
    self._schedule_dag_run(dag_run, active_runs_by_dag_id.get(dag_run.dag_id, set()), session)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/jobs/scheduler_job.py", 第1677行, 在 _schedule_dag_run中
    schedulable_tis, callback_to_run = dag_run.update_state(session=session, execute_callbacks=False)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", 第62行, 在 wrapper中
    return func(*args, **kwargs)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/dagrun.py", 第405行, 在 update_state中
    info = self.task_instance_scheduling_decisions(session)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", 第62行, 在 wrapper中
    return func(*args, **kwargs)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/dagrun.py", 第499行, 在 task_instance_scheduling_decisions中
    schedulable_tis, changed_tis = self._get_ready_tis(scheduleable_tasks, finished_tasks, session)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/dagrun.py", 第527行, 在 _get_ready_tis中
    session=session,
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", 第62行, 在 wrapper中
    return func(*args, **kwargs)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", 第813行, 在 are_dependencies_met中
    for dep_status in self.get_failed_dep_statuses(dep_context=dep_context, session=session):
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", 第834行, 在 get_failed_dep_statuses中
    for dep_status in dep.get_dep_statuses(self, session, dep_context):
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/ti_deps/deps/base_ti_dep.py", 第101行, 在 get_dep_statuses中
    yield from self._get_dep_statuses(ti, session, dep_context)
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/ti_deps/deps/not_in_retry_period_dep.py", 第47行, 在 _get_dep_statuses中
    next_task_retry_date = ti.next_retry_datetime()
  文件 "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", 第880行, 在 next_retry_datetime中
    delay = min(self.task.max_retry_delay, delay)
TypeError: '<' not supported between instances of 'datetime.timedelta' and 'float'
[2023-08-18 09:56:20,249] {process_utils.py:95} INFO - 向GPID 237发送Signals.SIGTERM
[2023-08-18 09:56:20,502] {process_utils.py:61} INFO - 进程psutil.Process(pid=237, status='terminated', exitcode=0, started='09:56:18') (237)已终止,退出码0
[2023-08-18 09:56:20,503] {scheduler_job.py:1296} INFO - 退出执行循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:12:04