定时任务
1.定时任务简介
- 要定时或周期性地执行任务
- celery beat 作为任务调度器,通过读取配置文件的内容,周期性地将定时任务发往任务队列
2.使用
- init.py:定义celery实例 (可自行定义在哪个文件)
from celery import Celery
app = Celery('my_task')
app.config_from_object('assets.const')
- const.py: 定义了celery的配置文件
BROKER_URL = 'redis://127.0.0.1:6379/10' # Broker配置,使用Redis作为消息中间件
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/11' # BACKEND配置,这里使用redis
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间
CELERY_TIMEZONE='Asia/Shanghai' # 时区配置
- tests.py:定义了定时任务函数
from assets import app
from celery.schedules import crontab
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(10.0, test.s(1, 3), name='1*3=') # 每10秒执行test
sender.add_periodic_task(
crontab(hour=16, minute=56, day_of_week=1), #每周一下午四点五十六执行sayhai
say_hello.s('hello'), name='say_hello'
)
@app.task
def test(x, y):
return x * y
@app.task
def say_hello(hello):
return hello
- 启动worker和beat
-
启动worker
celery worker -A assets.tests -l info
- worker: 代表启动的角色是worker,当然还有beat等其它角色
- A: 项目路径,这里我的项目引用路径是assets.tests
- l: 启动的日志级别,这里我启用了debug级别
查看日志输出,会发现我们定义的任务
-
启动beat
celery beat -A project.period_task -l debug
- 可查看每10秒执行一此的任务如下:
- 查看任务发送结果:
- 查看数据库储存的情况
- 可查看每10秒执行一此的任务如下:
-