celery 异步任务

发布时间 2023-09-02 21:18:36作者: houlian

最近在搭建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://:root@127.0.0.1:6379/1',backend='redis://:root@127.0.0.1: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中使用 再来分享