包架构封装
project
├── celery_task # celery包
│ ├── __init__.py # 包文件
│ ├── celery.py # celery连接和配置相关文件,且名字必须交celery.py
└── └── tasks.py # 任务体函数文件
注意: 任务体代码文件要与celery.py文件在同一个包下
beat:
beat也是一个socket,启动后会根据配置文件,自动添加任务(定时任务)给worker执行
启动worker:celery worker -A celery_task -l info -P eventlet
启动beat:celery beat -A celery_task -l info
使用场景
定时爬虫、定时更新(接口缓存更新)
案例
- celery_task/celery.py
from celery import Celery
broker = 'redis://127.0.0.1:6379/14' # 任务仓库
backend = 'redis://127.0.0.1:6379/15' # 结果仓库
include = ['celery_task.tasks'] # 任务们,完成需求的函数所在的文件
app = Celery(broker=broker, backend=backend, include=include)
# 时区
app.conf.timezone = 'Asia/Shanghai'
# 是否使用UTC
app.conf.enable_utc = False
# 配置
from datetime import timedelta
from celery.schedules import crontab
app.conf.beat_schedule = {
'jump_task': { # jump_task : 任务名(可以任意起)
'task': 'celery_task.tasks.jump', # task:任务源 jump: 任务函数
'schedule': timedelta(seconds=3), # schedule:周期添加任务的时间配置,每3秒添加一次任务
# 'schedule': crontab(hour=8, day_of_week=1), # 每周一早八点
'args': (25, 3), # args:任务函数所需参数
}
}
- celery_task/tasks.py
from .celery import app
@app.task
def jump(n1, n2):
print("积:%s" % (n1 * n2))
return n1 * n2
@app.task
def full(n1, n2):
print("商:%s" % (n1 // n2))
return n1 // n2