首页 > 其他分享 >celery笔记

celery笔记

时间:2023-09-03 11:23:22浏览次数:30  
标签:异步 task redis worker 笔记 celery 任务

celery介绍

1.它是什么?

  • 分布式的异步任务框架

  • 直译为: 芹菜 [ /ˈseləri ]

2.可以做什么?

  • 异步任务。(异步执行函数)

  • 延迟任务。(延迟5s任务(函数))

  • 定时任务。(例如:每天23点触发测试)[如果单纯执行定时任务,没必要用celery]

3.平台问题

  • celery is a project with minimal funding ,so we don't support Microsoft Windows. Please don't open any issues related to that platform.

4.读一下

  1. 可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)

  2. celery服务为其他醒目服务提供异步解决任务需求的。

  3. 注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时,异步完成项目的需求。

  4. 例如:人是一个独立运行的服务 | 医院也是一个独立运行的服务。

5.celery的架构由三部分组成

  1. 消息中间件(message broker)

    • celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,rabbitMQ,Redis等等

  2. 任务执行单元(worker)

    • worker是celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中

  3. 任务执行结果存储(task result store)

    • Task result store 用来存储worker执行的任务结果,celery 支持以不同方式存储任务的结果,包括AMQP,redis,mysql等

如何安装?

1. pip install celery

如何使用?

方式1.普通的

  1. 第一步: 定义一个py文件(名字随意,我们这里叫celery_task)
    from celery import Celery
    backend = 'redis://127.0.0.1:6379/1'    # 执行任务的结果,存放在redis的1号仓库
    broker = 'redis://127.0.0.1:6239/2'     # 消息队列,存放在redis的2号仓库
    app = Celery(__name__,broker=broker,backend=backend)
    ​
    # 被下面这个修饰,就变成了celery的任务
    @app.task
    def add(a,b):
        return a+b

     

  2. 第二步:提交任务(新建一个py文件:submit_task)
    from celery_task import add
    # 异步调用
    # 这一步只是把任务提交到了redis中,但是没有执行。提交后会返回一个唯一标识,后期用这个唯一标识去看任务执行结果。
    res=add.delay(55,77)
    print(res)  # 我这里的唯一标识是 'ed85b97a-a231-4d71-ba11-e5f6450d0b47'
  3. 第三步:启动worker(在命令行启动)
    cd 到相关目录
    celery -A celery_task worker -l info -P eventlet
    # -A 指的要启动的文件,这里指celery_task.py(后缀名可以省略)
    # -l 日志级别是info
    # -P eventlet 在win平台需要加上
    # 注意1:如果队列有任务,他就立马执行;如果没有任务,就会阻塞在原地;除非kill 掉,否则一直在原地等地任务。
    # 注意2:根据我之前的设置,我这个worker是去消息中间件redis的2号仓库中领取任务,执行完任务,会把结果放到redis的1号仓库。
  4. 第四步:查询结果是否执行完成
    from celery_task import app
    from celery.result import AsynResult
    id = 'ed85b97a-a231-4d71-ba11-e5f6450d0b47' # 上面的唯一标识
    ​
    if __name__=='__main__':
        a = AsynResult(id=id,app=app)
        if a.sucessful():
            result=a.get()
            print("任务成功:结果为 ",result)
        elif a.failed():
            print('任务失败')
        elif a.staus =='PENDING':
            print('任务等待中被执行')
        elif a.staus =='RETRY':
            print('任务异常正在重试')
        elif a.staus =='STARTED':
            print('任务已经开始被执行')

方式2.包管理的【官方推荐】

标签:异步,task,redis,worker,笔记,celery,任务
From: https://www.cnblogs.com/liqi175/p/17674778.html

相关文章

  • openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍
    openGauss学习笔记-59openGauss数据库管理-相关概念介绍59.1数据库数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。59.2表空间在......
  • 分布式服务的接口幂等性如何设计 笔记
    幂等:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。需要幂等场景:用户重复点击(网络波动)MQ消息重复应用使用失败或超时重试机制1.数据库唯一索引(新增)不建议使用2.token+redis(新增、修改)3.分布式锁(新增、修改)快速失败(抢不到锁的线程)控制......
  • 魔鬼冲刺学习笔记
    \[\huge{\textbf{魔鬼冲刺}\quad\textbf{2023.8.31-?}}\]高二是大部分OIer的最后一段竞赛时光,这真是“\(One\Last\Olympiad\)”了。所以我们开始魔鬼冲刺了!这里就用来记录这段时期的一些收获,还有学到的知识。由于停课后学习笔记给人的感觉略显凌乱,故在本文中笔者简......
  • 《C和指针》学习笔记
    C和指针学习笔记前置条件1.1配置环境下载vscode安装编译器:这里以MinGw-w64为例。下载MinGw-w64的安装包并解压。添加到系统环境编辑tasks.json(该文件负责项目的编译,如果需要同时编译多个文件,需要对该文件进行如下注释内的修改):{"tasks":[{......
  • celery 异步任务
    最近在搭建python测开平台新get的一个知识点,celery的使用,在此记录一下1.安装环境pipinstallcelerpipinstallcelery2.认识一下celery(1)简介:Celery是使用python编写的分布式任务调度框架,在我们日常web应用中,请求一个后端接口就是等待该接口的业务完成后再返回,如果接口......
  • 折半搜索 学习笔记
    关于算法折半搜索,又称meetinthemiddle算法。顾名思义,就是将整个搜索的过程分成两个部分分别进行搜索,然后再将两个部分搜索出来的答案进行合并,得到最终的答案。dfs搜索算法一般都是指数级别的,那么我们假如每次dfs时都有两种决策,那么我们执行dfs算法的时间复杂度为\(O......
  • 【学习笔记】二分图基础
    二分图与网络流基础(网络流待学)查看目录目录前置知识:二分图:二分图的定义:二分图的判定:例题:[NOIP2010提高组]关押罪犯二分图的匹配:匈牙利算法:例题:[ABC317G]Rearranging[ABC317G]Rearranging前置知识:tarjan强连通分量:有向图中几个点可以相互到达,就称这几个点是强连通......
  • 莫队学习笔记(如何处理增量)
    题目传送门:序列考虑我们已经求出了区间\([l,r]\)的答案,现在要求\([l,r+1]\)的答案。很明显增多的子序列有\((l,r+1),(l+1,r+1)...(r+1,r+1)\)。考虑求出\([l,r+1]\)中的最小值的位置\(p\)(可以用\(rmq~O(1)\)求出),那么\(a_p\)的贡献就是\(a_p\times(p-l+1)\),现在我......
  • 《管理学》阅读笔记(3)
    管理的本质‌‌‌‌管理的本质从某种意义上说是对组织成员在活动中的行为进行协调组织成员的行为能够被有效协调的前提是他们愿意接受这种协调,而且他们的行为具有一定程度的可协调性。管理是对人或对人的行为的管理;‌‌‌‌管理者的主要工作是选择对的人去做对的事情......
  • 学习笔记1-指令级并行
    指令级并行1.概念1.1.指令级并行(ILP)有两种实现方法:(1)依靠硬件来动态发现并实现并行;(2)依靠软件技术在编译时静态发现并行。1.2.数据依赖与冒险数据依赖(三种类型):数据依赖、名称依赖和控制依赖。1.数据依赖:1)指令i生成的结果可能会被指令j用到。2)指令j数据依赖于指令k,......