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

Airflow 2.0 CeleryExecutor启动worker报'int'无startswith属性排查

问题根因定位

这个AttributeError: 'int' object has no attribute 'startswith'报错是Celery参数解析时接收到了非字符串类型的参数导致的,属于Airflow 2.0和Celery版本不兼容、或者参数配置类型错误的典型问题,也是你任务一直卡在queued状态的直接原因:Celery Worker启动失败,没有消费调度器分配的排队任务。

追踪Airflow传递给Celery参数的方法

你可以通过以下两种方式快速拿到传递的参数值:

  • 临时修改Celery命令源码:打开报错栈里提到的/usr/local/lib/python3.8/site-packages/airflow/cli/commands/celery_command.py文件,找到_run_worker函数中celery_app.worker_main(options)这行代码,在它前面加一行打印逻辑:
    import json
    print("传递给Celery的参数: ", json.dumps(options, indent=2, default=str))
    
    重新执行airflow celery worker命令,控制台会输出完整的参数列表,检查列表中是否存在数值类型的元素,找到int类型的参数即可定位问题来源。
  • 如果你不想修改源码,直接在启动命令后追加--verbose参数,Airflow会输出更详细的启动日志,其中也包含传递给Celery的参数信息。

快速修复方案

  • 首先核对开发环境和正常的预发/生产环境的依赖版本,执行pip freeze | grep -E "apache-airflow|celery",确认三个环境的Airflow、Celery版本完全一致。这个问题90%的场景是开发环境不小心升级了Celery到5.x版本,而Airflow 2.0仅适配Celery 4.4.x版本,将Celery降级到4.4.7即可直接解决:
    pip install celery==4.4.7
    
  • 如果版本一致,检查你开发环境的airflow.cfg中Celery相关配置、以及Worker启动的自定义脚本,是否有将字符串类型的参数配置为数值类型,比如worker_concurrency之外的自定义参数如果传了纯数字的int值,就会触发这个解析错误。
  • 临时规避可以在启动Worker时强制指定pool和并发参数,跳过自动解析逻辑:
    airflow celery worker --pool prefork --concurrency 4
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:03