zoukankan      html  css  js  c++  java
  • 基于celery的任务管理

     1、celery基本原理

          Celery是一个由python编写的简单、灵活、可靠的用来处理大量信息的分布式系统,同时提供了操作和维护分布式系统所需要的工具,说白了就是一个用来管理分布式队列的工具。

          Celery主要包含如下几个概念:

    Brokers存放/拿取任务的地方,常见的brokersrabbitmqredisZookeeper等;

    Backend结果储存的地方,队列中的任务运行完后的结果或者状态需要被任务发送者知道,那么就需要一个地方储存这些结果,常见的backendredisMemcached

    Workers从队列中取出任务并执行;

    Tasks任务,一般由用户、触发器或其他操作将任务入队,然后交由workers进行处理。

    基本框架图见下:

      我们通常使用celery的命令来启动celery,启动的时候我们会指定一个celery实例,使用这个实例的task包装了的任务函数被包装成了celerytask对象,这样他们就有了delay方法。当我们执行delay方法时,这些task会找自己所属的那个celery instance,从中获取配置信息(主要是broker的地址)后将调用请求发往消息队列。

    2、celery基本使用方式

    快捷的任务启动函数delay

    先看最基本使用方式,创建一个celery实例,指定redis0号库和1号库为其brokerbackend,创建一个最基本的用实例的task装饰的函数add

          再在另一个文件创建一个一个使用delay启动的异步任务,启动后,delay会向worker发消息申请执行任务,workerbroker获取已注册的task并根据入参执行,然后我们再根据ready函数从backend获取任务执行状态,执行完成后我们再从backend获取返回结果。

     

    强大的任务启动函数apply_async

          apply_async(args[,kwargs[, ...]])celery真正的启动函数,delay是它的快捷版,apply_async可以指定更多的参数,第一部分就是task里面的python function的参数,比如add(x,y)x,y,第二个参数叫作keyword arguments,就是设定一些环境变量,第三个参数就是execution options,也就是这个task本身的执行选项,下面介绍几个常用参数:

    countdown:指定多少秒后执行任务;

     

    eta (estimated time of arrival):指定任务被调度的具体时间,参数类型是datetime

    可以看到,时间貌似不对,其实是因为celery服务端运行使用的UTC时区,如果不指定utcnow就等不到执行时间了。

    expires任务过期时间,已开始的任务会被执行完成,未开始的不再执行,参数类型可以是float,也可以是datetime

    link(Signature)上一个任务返回成功才执行这个任务,相当于与一个回调,回调函数可以引用任务结果。

     

    3、任务的排列组合

     group顺序的执行一组任务

     

    chain任务是可以被链接的,一个任务完成后,把结果传给另外一个任务,作为下一个任务的入参.

    chords: 可以传入一个回调函数,等任务执行完,参数传给回调函数处理。

    效果等同于groupchain的组合:

  • 相关阅读:
    C#遍历List并删除某个或者几个元素的方法
    7月清北学堂培训 Day 4
    7月清北学堂培训 Day 3
    7月清北学堂培训 Day 2
    7月清北学堂培训 Day 1
    P1383 高级打字机
    P2401 不等数列
    P1412 经营与开发
    P1314 聪明的质监员
    2019.7.9 校内测试 T3 15数码问题
  • 原文地址:https://www.cnblogs.com/small-office/p/9574674.html
Copyright © 2011-2022 走看看