zoukankan      html  css  js  c++  java
  • schedule与apscheduler与celery

    定时任务:
    schedule与apscheduler与celery
    量级: schedule < apscheduler < celery
    三者都支持定时任务配置:
    -- schedule相当于linux下的crontab,使用最简单,但不支持动态添加任务和任务实例化,所以在实际项目中使用不多。
    -- apschedule解决了schedule的不足,项目中定时任务使用最多
    -- celery 的功能强点在异步队列,定时功能只是一个附加功能,如果只为定时而使用celery则太过笨重,杀鸡用牛刀。
     
     
    想想定时任务需支持的几个关键点:
    1.触发方式:  按照特定频率/特定时间
    2.调度方法:阻塞/非阻塞/异步   
    3.任务的实例化,为什么实例化?具体使用看应用场景:
        -- 如果重启了一切重来,就按照默认的任务存内存,简单高效; 
        -- 当程序崩溃或应用重启时,还需要保持定时任务的正常流程,比如(程序A每两个小时运行一次,10点运行了,11点应用重启,那么还会维持下次在12点执行,因为任务的调度已经实例化到数据库),
        实例化的时候又要考虑,任务重复添加到数据库的问题,不急。有相关配置,是替换还是继续添加,追加就会存在同时有多个任务同时进行。
    4.任务的执行,是采用多线程还是多进程?看你是CPU密集型还是IO密集型,如果是后者就没必要浪费进程数了,也可以二者结合使用。
       当任务未执行完毕,下次调度又触发了,是要多个一起执行还是只保留一个实例,或配置实现可以最多运行n个实例?
    5.异常,当发生异常时如何第一时间知道
     
     
     
    celery:
    作为一个异步队列,可以支持高并发,如百万级别。当项目启动时,遇到celery的 delay方法时,程序会直接跳过然后将该方法加入到配置的消息中间件(broker,如redis,rabbitMQ)中。
    而启动的worker则会进行消费任务。
    加深参考:   https://blog.csdn.net/preyta
     
     
    集群与分布式:
    集群是不同的机器运行相同的代码,处理相同的事情,比如两个厨师同时炒菜
    分布式是不同的机器做不同的事,相互协作。比如厨师和切菜师
     
     
     
     
  • 相关阅读:
    LeetCode105 从前序遍历和中序遍历构造二叉树
    LeetCode61 扑克牌中的顺子
    LeetCode141 环形链表
    LeetCode103 二叉树的锯齿形层次遍历
    509 斐波那契数
    剑指29 顺时针打印矩阵
    malloc分配内存2种方式:brk和mmap
    Python学习第139天(Django的分页器(paginator))
    Python学习第138天(Django的用户认真组件)
    Python学习第137天(admin部分参数补充)
  • 原文地址:https://www.cnblogs.com/yeteng/p/12180262.html
Copyright © 2011-2022 走看看