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

Django环境下Celery处理长任务(含动态队列)的适配配置咨询

Django + Celery 长任务适配配置方案

需求场景

  • 任务耗时数分钟,核心处理逻辑在远程服务器执行
  • Worker仅完成调用远程API、等待响应、更新本地数据库的轻量操作
  • 任务类型多样,对应队列动态生成,无法提前定义
  • 每种任务类型同一时间仅允许执行1个,计划用单个Worker处理所有任务

现有配置

配置项

CELERY_CREATE_MISSING_QUEUES = True
CELERYD_CONCURRENCY = 10
CELERYD_PREFETCH_MULTIPLIER = 1

Worker启动命令

celery -A my_project worker --loglevel=info

Celery应用定义

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

优化适配配置

调整后的Celery配置(Django settings中)

# 保留自动创建动态队列
CELERY_CREATE_MISSING_QUEUES = True
# 单个Worker进程,确保同一时间仅处理一个任务,避免同类型任务并行
CELERYD_CONCURRENCY = 1
# 每次仅预取1个任务,防止未处理任务堆积在Worker本地
CELERYD_PREFETCH_MULTIPLIER = 1
# 任务执行完成后再向Broker确认,避免Worker意外退出导致任务丢失
CELERY_TASK_ACKS_LATE = True
# 可选:每处理100个任务重启一次Worker子进程,预防内存泄漏
CELERY_WORKER_MAX_TASKS_PER_CHILD = 100

优化后的Worker启动命令

celery -A my_project worker --loglevel=info --queues=*

加上--queues=*明确指定处理所有队列,避免版本差异导致的默认行为变化

配置说明

  1. CELERYD_CONCURRENCY = 1:单个Worker进程单并发,结合动态队列特性,每个队列的任务会被依次执行,严格保证同类型(同队列)任务同一时间仅运行一个。
  2. CELERY_TASK_ACKS_LATE = True:长任务场景下,Worker意外退出时,未完成的任务会重新回到队列,不会直接丢失。
  3. CELERY_WORKER_MAX_TASKS_PER_CHILD:针对长期运行的Worker,定期重启子进程可以避免内存泄漏等累积问题,提升稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:53:14