Celery 是一款非常简单、灵活、可靠的分布式系统,可用于处理大量消息,并且提供了一整套操作此系统的一系列工具。
Celery 是一款消息队列工具,可用于处理实时数据以及任务调度。
首先,Celery
可以任意部署。而非必要继承框架使用。单独使用时,如何搭建?主要从:项目架构
、配置
、使用
项目架构
async_tasks celery 目录
__init_.py celery 对象
config.py celery 配置
tasks.py celery 任务 也可以是一个目录。根据模块拆分
schedules_config.py 定时任务配置
配置
celery 对象
import os
from celery import Celery, platforms
from async_tasks import config
platforms.C_FORCE_ROOT = True
os.environ['C_FORCE_ROOT'] = 'true'
app = Celery('app') # 创建 celery 实例
app.config_from_object(config) # 加载配置
# 加载 tasks
app.autodiscover_tasks([
'async_tasks.schedules'
])
celery 配置
from async_tasks.schedules_config import beat_schedules
import os
redis_host = os.environ.get('REDIS_HOST', '127.0.0.1')
redis_port = os.environ.get('REDIS_PORT', 6379)
# redis_password = os.environ.get("REDIS_PASSWORD", "equotaadmin")
# redis_url = f'redis://default:{redis_password}@{redis_host}:{redis_port}'
redis_url = f'redis://{redis_host}:{redis_port}'
broker_url = f'{redis_url}/15'
# 配置celery时区,默认时UTC。
timezone = 'Asia/Shanghai'
# 可接受的内容格式
accept_content = ['pickle', 'json']
# 任务序列化数据格式
task_serializer = "json"
# 结果序列化数据格式
result_serializer = "json"
result_backend = f'{redis_url}/14'
result_cache_max = 100 # 任务结果最大缓存数量
result_expires = 3600 # 任务过期时间
worker_redirect_stdouts_level = 'INFO'
beat_schedule_filename = 'celery-beat'
# 加载 定时任务
imports = [
'async_tasks.tasks',
]
beat_schedule = beat_schedules
celery 任务
from async_tasks import app
@app.task
def test():
print('hello')
定时任务配置
from celery.schedules import crontab
beat_schedules = {
'test': {
'task': 'async_tasks.tasks.test',
'schedule': crontab('*'),
},
}
使用
启动命名
celery -A async_tasks worker -l info # celery worker
celery -A async_tasks beat -l info # celery beat
python 定时任务可以加到 celery beat
中。如果使用那么你要起来两个服务一个是 celery worker另一个是定时服务。
项目中使用有两种方式调用
test.delay() 简单使用
test.apply_async() 高阶使用