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

如何避免Celery中同名app.tasks任务同时执行?

问题:实现Celery同名任务单实例串行执行

经过多次测试与搜索仍未解决问题,盼您指导。代码托管于GitHub,因主代码复杂,已编写复现问题的简易示例。我有一个worker包含四个app.tasks:app_1000、app_1002、app_1004、app_1006,要求每个同名任务同一时间仅执行一次,当前任务完成后才可执行下一个。

Celery配置如下:

broker_url='amqp://guest@localhost//'
result_backend='rpc://'
include=['celery_app.tasks']
worker_prefetch_multiplier = 1

task_routes={
    'celery_app.tasks.app_1000':{'queue':'q_app'},
    'celery_app.tasks.app_1002':{'queue':'q_app'},
    'celery_app.tasks.app_1004':{'queue':'q_app'},
    'celery_app.tasks.app_1006':{'queue':'q_app'},
    'celery_app.tasks.app_timeout':{'queue':'q_timeout'},
}

配置中已设置worker_prefetch_multiplier = 1。我使用FastAPI发送请求,用Flower监控任务。发送20个任务后,初期正常,但后续出现同名任务并发执行的情况(如app_1000、app_1006同时运行多个实例)。

期望:同名任务同一时间仅执行一个实例,但不知如何实现。

重要提示:请勿建议为每个任务创建独立队列,实际项目中有100+个app.tasks,管理成本过高。

如需运行示例,可执行以下命令:

celery -A celery_app  worker -Q q_app --loglevel=INFO --concurrency=4 -n  worker@%h 
celery flower --port=5566
uvicorn api:app --reload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:16:11