celery异步分布式框架使用二(定时任务)


一、简介

  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

    然后我们看到执行结果。