Celery 任务队列集成
Litefs 提供了与 Celery 的无缝集成,简化异步任务处理。
安装
pip install celery redis
快速开始
1. 初始化 Celery
from litefs.core import Litefs
from litefs.tasks import Celery
app = Litefs(
host='0.0.0.0',
port=8080,
celery_broker='redis://localhost:6379/0',
celery_backend='redis://localhost:6379/1',
)
celery = Celery(app)
2. 定义任务
@celery.task
def send_email(to, subject, body):
# 发送邮件
return {'status': 'sent', 'to': to}
3. 异步执行
# 提交任务
result = send_email.delay('user@example.com', 'Hello', 'World')
task_id = result.id
# 查询状态
status = celery.get_task_status(task_id)
# 获取结果
result = celery.get_task_result(task_id)
任务选项
基本选项
@celery.task(
name='custom_task', # 任务名称
queue='high_priority', # 队列名称
max_retries=3, # 最大重试次数
default_retry_delay=60, # 重试延迟(秒)
time_limit=300, # 硬时间限制
soft_time_limit=270, # 软时间限制
)
def process_data(data):
return {'processed': data}
绑定任务
@celery.task(bind=True)
def process_file(self, filepath):
try:
# 处理文件
return {'status': 'success'}
except Exception as exc:
raise self.retry(exc=exc)
定时任务
from celery.schedules import crontab
@celery.task
def cleanup_sessions():
# 清理会话
pass
# 每 30 分钟执行
celery.schedule(
name='cleanup-every-30-minutes',
task=cleanup_sessions,
schedule=30 * 60,
)
# 每天凌晨 2 点执行
celery.schedule(
name='daily-report',
task=send_daily_report,
schedule=crontab(hour=2, minute=0),
)
API 参考
Celery 类
方法 |
说明 |
|---|---|
|
任务装饰器 |
|
配置定时任务 |
|
获取任务结果对象 |
|
获取任务状态 |
|
获取任务结果 |
|
撤销任务 |
|
获取活跃任务列表 |
|
获取已注册任务列表 |
|
获取队列长度 |
|
健康检查 |
配置选项
配置项 |
默认值 |
说明 |
|---|---|---|
|
|
Broker URL |
|
|
Result Backend URL |
|
|
额外配置字典 |
启动 Worker
# 启动 Worker
celery -A app.celery worker --loglevel=info
# 启动 Beat(定时任务)
celery -A app.celery beat --loglevel=info
# 同时启动 Worker 和 Beat
celery -A app.celery worker --beat --loglevel=info
完整示例
参见 examples/05-production/celery_tasks.py,
其中定义了 process_task、send_email、cleanup_cache 三个任务与 Beat 定时调度配置。