一、简介
celery beat
是一个调度程序;它定期启动任务,然后由集群中的可用节点执行任务。默认情况下会从配置中的
beat_schedule
项中获取条目(entries),但是也可以使用自定义存储,例如将entries存储在SQL数据库中。二、配置定时任务
在这里贴一下项目文件,避免不是从上一篇博客过来的小伙伴
定时任务比较方便,只需要在配置文件中进行配置
1、celeryconfig.py 配置文件:
# coding=utf-8 from celery.schedules import crontab broker_url = 'redis://127.0.0.1:6379/0' # redis 存储发送端来的任务队列 result_backed = 'redis://127.0.0.1:6379/1' # 用redis存储执行端执行得到结果 timezone = 'Asia/Shanghai' # 设置时间的时区 注意这里是上海 # imports = [ # "proj.tasks", # 导入py文件,经过测试可以不需要 # ] beat_schedule = { '任务名字' : { 'task' : 'proj.tasks.add', # 这个就是我们定义的具体任务 'schedule' : crontab(), # 默认是一分钟一次,具体其他时间设置可以参考该类定义的构建函数 # 'args' : (2, 5) 'kwargs': { 'x' : 4, 'y' : 7 } # 这个crontab就是时间调度配置:每分钟执行一次,所以一分钟一条 } }
①、首先要先设置一下时区,不然很悲催
②、定义任务,可以看到是字典格式,定义多个,只需继续增加就可以
③、定义轮训相关时间 schedule:
贴一下源码,可以看到分钟、小时、天、周,根据需要进行实例化类crontab即可。
④、关于args和kwargs参数,我定义的任务需要传递参数,这里就可以使用这两个
使用args可以使用元组和列表(2, 3),建议使用元组,如果只有一个参数记得后边的,
使用kwargs 字典{你的形参:值}
2、celery.py
# coding=utf-8 from . import celeryconfig from celery import Celery app = Celery( "proj", include=['proj.tasks'] ) app.config_from_object(celeryconfig) if __name__ == "__main__": app.start()
3、tasks.py
# coding=utf-8 import time from .celery import app @app.task def add(x=3, y=4): return x + y @app.task def mul(x, y): return x * y
4、接下来启动定时任务
5、启动celery
然后我们看到执行结果。