
安装依赖
pip install celery redis # 使用 Redis 作为 Broker
pip install flower # 可选,任务监控工具项目结构
your_project/
├── your_project/
│ ├── __init__.py
│ ├── celery.py # 新增 Celery 初始化文件
│ ├── settings.py
│ └── urls.py
└── your_app/
└── tasks.py # 存放异步任务 创建 celery.py
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks() # 自动发现所有 Django App 中的 tasks.py 修改 __init__.py
from .celery import app as celery_app
__all__ = ('celery_app',) 配置 settings.py
# Celery 配置
CELERY_BROKER_URL = 'redis://localhost:6379/0' # Broker 地址
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1' # 结果存储(可选)
CELERY_TIMEZONE = 'Asia/Shanghai' # 时区设置 在 App 中创建 tasks.py
from celery import shared_task
from django.core.mail import send_mail
@shared_task
def add(x, y):
return x + y调用异步任务
# 在视图或其他地方调用
from your_app.tasks import add
def register_user(request):
# ... 用户注册逻辑
add.delay(98, 98) # 异步执行
return HttpResponse("Registered!")启动 Worker
celery -A your_project worker --loglevel=info启动 Beat(定时任务)
celery -A your_project beat --loglevel=info监控任务(可选)
celery -A your_project flower # 访问 http://localhost:5555在 settings.py 中定义周期性任务:
from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
'cleanup-every-night': {
'task': 'your_app.tasks.add',
'schedule': crontab(hour=3, minute=30), # 每天凌晨3:30执行
},
}任务重试与错误处理
@shared_task(bind=True, max_retries=3)
def process_data(self, data):
try:
# 处理数据...
except Exception as e:
self.retry(exc=e, countdown=60) # 60秒后重试任务链与组合
from celery import chain
chain(task1.s(), task2.s(), task3.s()).apply_async()结果处理
result = add.delay(98, 98)
print(result.get(timeout=10)) # 获取任务结果(阻塞)使用 Supervisor 管理进程
[program:celery_worker]
command=celery -A your_project worker --loglevel=info
directory=/path/to/your_project
autostart=true
autorestart=true优化并发
celery -A your_project worker --concurrency=4 # 根据 CPU 核心数调整安全配置
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。