在 Windows 上启动 Celery 只要记住 3 件事:
- 必须装 eventlet(或 gevent)并指定
-P eventlet; - 项目路径下要有
celery.py并且__init__.py里做app.autodiscover_tasks(); - 启动命令用 PowerShell / CMD 都可以,但建议 PowerShell。
下面给出最小可复制的完整流程(假定项目名叫 myproject,与 manage.py 同级)。
一、装包
powershell
# 在虚拟环境里执行
pip install celery eventlet
# 如用 Redis 做 Broker
pip install redis二、确认目录结构(无则补齐)
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py ← 这里要导 app
│ ├── settings.py
│ ├── celery.py ← 创建
│ └── urls.py
└── tasks.py ← 业务任务,可放任意 appcelery.py(示范)
python
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()init.py(导 app,保证 Django 能识别)
python
from .celery import app as celery_app
__all__ = ('celery_app',)三、配置 broker(settings.py 末尾加两行即可)
python
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'本地没 Redis 可先用 CELERY_BROKER_URL = 'memory://' 做测试,但重启就丢任务。
四、启动 worker(PowerShell 示例)
powershell
# 切到项目根目录(manage.py 所在)
cd D:\...\django_celery
# 启动 worker
celery -A django_celery worker -l INFO -P eventlet看到[tasks] . tasks.add . tasks.send_mail_code
且最后一行出现Worker ready!
即成功。
五、常见报错速查
报错
ValueError: not enough values to unpack
→ 你忘了加-P eventlet(Windows 默认的 prefork 不能用)。报错
ModuleNotFoundError: No module named 'myproject'
→ 没在项目根目录启动,或__init__.py没导celery_app。日志提示
Consumer: Connection refused
→ Redis 没启动;先运行redis-server(或把 broker 换成 RabbitMQ)。
六、开发调试常用命令
powershell
# 只跑一个并发线程,调试更清爽
celery -A myproject worker -l DEBUG -P eventlet -c 1
# 启动定时任务调度器(如用 celery beat)
celery -A myproject beat -l INFO复制即可用,祝 Windows 下 celery 一路绿灯!