celery架构图
celery原理
按我的理解来说就是,
broker是一个提交任务的人
worker是一个完成任务的人
但是结果还不知道给谁,那么我就先存储到backends里面。
因为这是一个异步的框架!所以,在worker中会同时执行多个任务!
celery的使用
-
安装
pip install celery -
设置对象
app=Celery(‘任务名’, broker=’这里为任务存储的地址’, backend=’这里为任务结果存储的地址’)
例:
backend=‘redis://:123456@127.0.0.1:6379/1’
broker=‘redis://:123456@127.0.0.1:6379/2’ -
设置任务
只要在任务的上方添加@app.task就可以了
例
@app.task
def add(x,y):
return x+y
注:之后一定不要忘记启动celery
celery worker -A celery_task -l info -P eventlet(windows平台)
celery worker -A celery_task -l info(其他平台) -
执行任务
4.1 立刻执行(同步)
add.delay(x,y)
4.2 延迟任务
add.apply_async(args=(x, y), eta=eta)
注:eta为utcnow()
4.3 定时任务
# 时区
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False
# 任务的定时配置
from datetime import timedelta
from celery.schedules import crontab
app.conf.beat_schedule = {
'low-task': {
'task': 'celery_task.tasks.low',
'schedule': timedelta(seconds=3),
# 'schedule': crontab(hour=8, day_of_week=1), # 每周一早八点
'args': (300, 150),
}
}
启动定时任务:celery beat -A celery_task -l info