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

Celery Worker未正常执行Beat下发的定时任务求助

问题:Celery Worker接收任务但不执行,定时任务无输出

环境与配置

  • Django项目集成Celery + Redis,已安装celery、django-celery-beat并完成配置
  • 定时任务为发送Telegram消息,手动触发任务时Telegram消息发送正常,但Beat调度后Worker接收任务却不执行

任务代码

import logging

from celery import shared_task
from borrowings.telegram_helpers import send_telegram_notification

logger = logging.getLogger(__name__)


@shared_task
def send_hi():
    logger.info("Sending hi!")
    message = "Hi!"
    send_telegram_notification(message)

操作步骤

  • 启动Redis:D:\Redis>redis-server.exe
  • 启动Worker:LibraryService worker -l info
  • 启动Beat:celery -A LibraryService beat -l info

日志情况

Beat日志(正常下发任务)

2023-07-31 02:51:14,974 [INFO] beat: Starting...
2023-07-31 02:51:15,001 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)
2023-07-31 02:52:14,997 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)
2023-07-31 02:53:14,998 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)
2023-07-31 02:54:14,998 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)
2023-07-31 02:55:14,999 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)
2023-07-31 02:56:14,999 [INFO] Scheduler: Sending due task send_hi (borrowings.tasks.send_hi)

Worker日志(接收任务但无执行日志)

2023-07-31 02:51:04,640 [INFO] mingle: searching for neighbors
2023-07-31 02:51:05,176 [INFO] child process 20816 calling self.run()
2023-07-31 02:51:05,278 [INFO] child process 1748 calling self.run()
2023-07-31 02:51:05,284 [INFO] child process 21456 calling self.run()
2023-07-31 02:51:05,325 [INFO] child process 19108 calling self.run()
2023-07-31 02:51:05,338 [INFO] child process 23508 calling self.run()
2023-07-31 02:51:05,345 [INFO] child process 22716 calling self.run()
2023-07-31 02:51:05,398 [INFO] child process 18304 calling self.run()
2023-07-31 02:51:05,428 [INFO] child process 20284 calling self.run()
2023-07-31 02:51:05,668 [WARNING] D:\projects\django\LibraryService\venv\Lib\site-packages\celery\app\control.py:56: DuplicateNodenameWarning: Received multiple replies from node name: celery@Dmytry.
2023-07-31 02:54:15,000 [INFO] Task borrowings.tasks.send_hi[e752e4ec-cfbe-49a8-8af3-81baef67845e] received
2023-07-31 02:54:15,842 [INFO] child process 21376 calling self.run()
2023-07-31 02:54:15,842 [INFO] child process 1416 calling self.run()
2023-07-31 02:54:15,842 [INFO] child process 1468 calling self.run()
2023-07-31 02:54:15,844 [INFO] child process 1204 calling self.run()
2023-07-31 02:54:15,854 [INFO] child process 21108 calling self.run()
2023-07-31 02:56:15,001 [INFO] Task borrowings.tasks.send_hi[87dfe9ca-efbb-4349-81de-52ae60bb84e2] received
2023-07-31 02:56:15,855 [INFO] child process 12220 calling self.run()

排查方案

1. 解决Worker节点名重复问题

日志中出现DuplicateNodenameWarning,说明存在多个同名Worker节点,可能导致任务分配异常。

  • 停止所有Worker进程,确保没有残留的Worker在后台运行
  • 启动Worker时指定唯一节点名:
    celery -A LibraryService worker -l info -n worker1@%h
    

2. 检查Celery与Redis的连接配置

确认settings.py中Celery的Broker和Backend配置是否正确,确保Worker和Beat使用同一个Redis实例:

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
  • 验证Redis连接:在Django shell中执行from celery import current_app; current_app.connection().connect(),查看是否有连接错误

3. 检查任务序列化配置

如果任务参数(或任务本身)序列化方式不兼容,可能导致Worker无法解析任务:
在settings.py中显式指定序列化方式:

CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_SERIALIZER = 'json'

4. 测试手动触发任务

在Django shell中手动触发任务,观察Worker是否执行:

from borrowings.tasks import send_hi
send_hi.delay()

如果手动触发也不执行,说明任务本身或Worker配置存在问题;如果手动执行正常,问题可能出在Beat与Worker的任务路由或调度配置。

5. 检查任务路由与队列配置

  • 确认Beat调度的任务是否发送到了Worker监听的队列
  • 启动Worker时显式指定队列:
    celery -A LibraryService worker -l info -Q default
    
  • 检查settings.py中是否自定义了队列路由,确保任务被分配到正确队列

6. 升级Celery与依赖版本

版本不兼容可能导致此类问题,尝试升级到稳定版本:

pip install --upgrade celery django-celery-beat redis

7. 检查日志级别与配置

确认Worker的日志级别是否足够,或者任务中的logger是否配置正确:

  • 在任务中添加更底层的打印语句(如print("Sending hi!")),排除日志配置问题
  • 检查Django的settings.py中日志配置是否包含了Celery任务的logger

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:22:33