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

Celery Worker仅偶尔拾取任务问题求助(含代码与运行日志)

解决Celery Worker不稳定拾取任务的问题

看起来你的Celery Worker出现了间歇性无法拾取任务的情况,结合你提供的日志和代码,我整理了几个可能的解决方案,你可以逐一尝试:

1. 修复重复节点名警告(最优先)

你的Worker启动日志里有DuplicateNodenameWarning,这说明系统里可能存在多个同名的Celery Worker进程,或者之前的Worker没有彻底关闭。这种情况会导致任务路由混乱,出现间歇性不工作的问题。

  • 启动Worker时指定唯一节点名:
    celery -A mysite worker -l info --pool=solo -n worker_unique@DESKTOP-OG8ENRQ
    
  • 检查并杀掉残留的Celery进程:
    Windows上可以打开任务管理器,找到所有关联的python.exe或celery.exe进程,结束后再重新启动Worker。

2. 确保Celery任务与App正确关联

你的tasks.py里用了@task(name="submit"),但没有显式关联到Celery App,这可能导致任务注册不稳定。修改tasks.py:

from mysite.celery import app  # 导入你的Celery App

@app.task(name="submit")
def start_task(city, category, email):
    print("I'm at tasks!")
    print(city, category, email)
    """sends an email when feedback form is filled successfully"""
    logger.info("Submitted")
    return start(city, category, email)

修改后重启Worker,确认任务列表里的submit任务正常显示。

3. 重置Redis Broker状态

有时候Redis里的缓存或未处理的任务会导致Worker异常。调试阶段可以尝试:

  • 重启Redis服务;
  • 清空Redis中的Celery相关数据(注意:生产环境请勿随意执行):
    redis-cli FLUSHDB
    

然后重新启动Worker和Django服务器,测试任务是否能正常被拾取。

4. 关闭Django DEBUG模式或禁用自动重载

当DEBUG=True时,Django的自动重载机制可能会导致Celery任务的重复注册或进程冲突。你可以:

  • 临时将settings.py中的DEBUG改为False,测试任务是否稳定;
  • 启动Django服务器时禁用自动重载:
    python manage.py runserver --noreload
    

5. 增加任务发送的调试信息

在forms.py的submit方法中添加任务状态打印,确认任务是否成功发送到Broker:

def submit(self):
    print("I'm at forms!")
    task = start_task.delay(self.cleaned_data['city'], self.cleaned_data['category'], self.cleaned_data['email'])
    print(f"任务ID: {task.id}, 当前状态: {task.status}")  # 新增调试信息
    return task

同时用redis-cli KEYS "*celery*"查看Redis中是否存在任务队列数据,确认任务是否真的进入了Broker。

6. 提升Worker日志级别

将Worker的日志级别改为debug,获取更详细的运行信息:

celery -A mysite worker -l debug --pool=solo -n worker_unique@DESKTOP-OG8ENRQ

这样可以看到Worker是否接收到任务、是否有潜在的错误被忽略,帮助定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:27:35