首页 > 其他分享 >celery 异步任务

celery 异步任务

时间:2023-09-02 21:22:24浏览次数:29  
标签:异步 Celery redis celery 任务 执行

最近在搭建python测开平台新get的一个知识点,celery的使用,在此记录一下

1. 安装环境 pip install celer

pip install celery

2. 认识一下celery

(1) 简介:

Celery是使用python编写的分布式任务调度框架,在我们日常web应用中,请求一个后端接口就是等待该接口的业务完成后再返回,如果接口执行的任务很耗时,就会造成服务阻塞甚至请求超时,而前端又需要及时地给出响应,那么这种情况,就可以将耗时的任务交给异步队列服务器去处理

(2) 认识一下几个概念:

celery应用:简单一句话就是:用来定义要执行的任务。举个例子,测开平台,我们写的接口测试用例会根据模块分组,然后添加到一个执行任务里面。

broker:可以理解为存放任务数据的队列,它支持消息队列(rabbitmq, zk)、还有一个缓存reids,也就是执行的任务数据放到队列或者缓存

worker:监听到broker有任务就拿出来执行,消费者

backend: 存放任务执行后的结果,可以放在数据库中

celery beat: 这是一个定时任务,每天把任务加入到一个测试计划中,周期性的执行接口测试用例

 

上python脚本看效果:

(1) 创建一个测试py文件,task.py

 

导入Celery的模块:

from celery import Celery

实例化一个应用

app = Celery('my_task', broker='redis://:[email protected]:6379/1',backend='redis://:[email protected]:6379/2') windows版本的链接:Windows版本redis下载

在定义一个异步任务:

@app.task
def add(x, y):
    """
    定义一个异步任务
    """
    time.sleep(3)
    print(x + y)

简单的准备工作已准备好,接下来开始异步调用该add方法:

异步调用最后会返回一个异步对象,这个可以放在数据库中,注意: 这里只是放入redis中

进入本地redis看数据:

最后我们在执行一下任务: celery -A task worker -l info -P eventlet 

收到任务, 在去执行add方法, 由于异步结果也是在redis中,我们再去看看redis idnex=2中的结果

最后我在去结合到django中使用 再来分享

标签:异步,Celery,redis,celery,任务,执行
From: https://www.cnblogs.com/houlian/p/17674160.html

相关文章

  • reduce实现异步串行重复请求同一个接口
    在项目中会遇到循环请求接口的情况,不管使用for、forEach、map进行循环都会出现并行请求接口出现高并发,使用reduce实现异步串行重复请求同接口,等待上一次请求结束后在进入下一次请求。需要循环的对象数组:letloopList=[{code:1,name:"名称1",p......
  • 来玩,前端性能优化(+面试必问:宏任务和微任务)
    前端性能优化相关的“技能点”笔者之前也写过几篇,但是大多都是小打小闹。我重新整理了曾经使用过的性能优化手段。本文介绍三种方案:页面资源预加载、服务请求优化和非首屏视图延迟加载。页面资源预加载页面是不可能真正预加载的,但是有一个地方:入口代码中依赖的js模块。一般来说,......
  • 关于windows定时任务备份mysql
    windows 定时一、右击我的电脑->选择管理->任务计划程序,打开计划任务二、开始创建任务计划。1、常规设置?都懂不再多说。2、触发器:新建->设置一个时间3、操作:新建->选择一个可执行程序,参数如果执行PHP备份mysql。首先mysql加入环境变量,直到mysql在命令行能执行如在path中新......
  • 分片+异步 优化in子查询
    将一次性查询改为通过分片、异步优化in子查询集合数据分片是将数据按指定大小进行分组,像java中使用guava或hutool工具的partition进行分组,然后分批处理或者获取数据,in子查询会通过创建临时表,不易将大量数据放入in子查询中案例:分片+异步操作@Testvoidtest32(){Execu......
  • Flink 1.17教程:任务槽Task Slots和并行度的关系
    任务槽TaskSlots在ApacheFlink中,任务槽(TaskSlots)是指可用于执行并行任务的资源单元。每个任务槽可以看作是一个可用的执行线程或处理单元,用于并行执行作业的不同部分。通俗来说,可以将任务槽想象成一个工作台,而每个工作台上都可以同时进行一项任务。任务槽的数量决定了同时可以......
  • 开发小技巧 - 合理使用Visual Studio 2022内置任务列表(TODO)
    前言在开发编码过程中经常会因为各种问题而打断自己的思绪和开发计划,可能会导致本来准备开发或者需要测试的功能到要上线的时候才想起来没有做完。这种情况相信很多同学都遇到过,咱们强大的VisualStudio内置了一个任务列表(TODO)能让我们当做待办清单功能使用,接下来我们快速了解一......
  • C# 异步执行操作
    为了方便测试异步,先加个计时计时相关(可以直接跳过该部分)//开始计时Stopwatchstopwatch=newStopwatch();stopwatch.Start();//停止计时stopwatch.Stop();//输出计时毫秒数stopwatch.ElapsedMilliseconds阻塞延迟,下面两个分别表示阻塞三秒钟同步阻塞:Thr......
  • 5分钟带你回顾大文件分片以及异步计算hash的步骤
    背景  文件上传功能在中后台项目中是最常见的功能,分片上传是一种将大文件分割成多个小片段进行上传的技术,可以有效提高文件上传的速度和稳定性。思路  1.首先就是使用File.slice对文件进行分割产出一个数组用于存储每个小的chunk片段  2.异步计算hash值,可用作标识文......
  • python-每天定时任务:连接或断开网络
    importdatetime,time,osfromapscheduler.schedulers.blockingimportBlockingSchedulerdeffunc0():now=datetime.datetime.now()ts=now.strftime('%Y-%m-%d%H:%M:%S')print('dofunctime:',ts)deffunc1():os.syst......
  • C# word对话框及任务窗格
    任务窗格//获取任务窗格对象TaskPanestaskPanes=wordApp.TaskPanes;//确保"格式"任务窗格可见if(taskPanes[WdTaskPanes.wdTaskPaneFormatting].Visible==false){taskPanes[WdTaskPanes.wdTaskPaneFormatting].Visible=true;}对话框wordApp.Dialogs[WdWo......