celery异步任务的实现

没有被谁好好爱过,如果谁对我好,我会以为遇到了对的人,若有打扰到,真的不好意思。

Django celery

1、celery是一种分布式异步任务队列。

在这里插入图片描述

2、使用场景:

web应用:当用户在网站进行某个操作需要很长时间完成时,我们可以将这种操作交给Celery执行,直接返回给用户,等到Celery执行完成以后通知用户,提高网站的并发以及用户的体验感。

主要有:消息中间件broker、任务执行单元worker、结果存储backend

任务模块包含定时任务 celery beat 和异步任务async task

  1. 异步任务通常在业务逻辑中被触发并发往消息队列,而定时任务由Celery Beat进程周期性地将任务发往消息队列;

  2. 任务执行单元Worker实时监视消息队列获取队列中的任务执行;

  3. Woker执行完任务后将结果保存在Backend中;

    celery worker -A cdscp -l debug

各个参数含义:

worker: 代表启动的角色是work

-A :项目路径cdscp

-l:启动的日志级别

启动了worker,还需要通过delay或apply_async来将任务添加到worker中

3、实例演示:

**加粗样式
celery_task.py

import celery
import time

app = celery.Celery("celery_test",broker='redis://:@127.0.0.1:6379/0',backend='redis://:@127.0.0.1:6379/1')

@app.task
def send_email(param):
    time.sleep(5)
    print '向{}发送邮件'.format(param)
    return "ok"


@app.task
def send_msg(param):
    time.sleep(5)
    print '向{}发送短信'.format(param)
    return "ok"

produce_task.py

from celety_task import send_email, send_msg

result = send_email.delay('王子')
print result.id


result = send_msg.delay('王子')
print result.id

get_result.py

from celery.result import AsyncResult
from celety_task import app

ansyc_result = AsyncResult(id='f07403ed-90e0-42a1-b1bb-a2d75869495b', app=app)

if ansyc_result.successful():
    result = ansyc_result.get()
    print result
elif ansyc_result.failed():
    print "failed"
elif ansyc_result.status == 'pending':
    print 'pending'
elif ansyc_result.status == 'retry':
    print 'retry'
elif ansyc_result.status == 'started':
    print 'started'
celery worker -A celety_task -l info

出现下图,表示worker启动成功
在这里插入图片描述

任务执行成功之后会生成对应的任务id,redis中可以进行查询
在这里插入图片描述
在这里插入图片描述
通过celery的AsyncResult对象获取执行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37304462/article/details/113920923