• 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

        

        然后我们看到执行结果。

        

      

    
    
     
  • 相关阅读:
    反射获取成员方法并运行
    反射获取成员变量,并修改值
    反射获取私有的构造方法运行
    反射获取构造方法并运行的快速的方式
    通过反射,获取有参数的构造方法并运行
    ssh端口映射
    python常见环境安装
    hadoop fs管理文件权限
    oracle通过DBlink连接mysql(MariaDB)
    [mysq]ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
  • 原文地址:https://www.cnblogs.com/leslie003/p/15883485.html
Copyright © 2020-2023  润新知