django中celery的使用

1.什么是celery
celery是一个异步任务框架,当我们的程序中存在一个比较耗时的操作时,可以启动这个异步任务框架,
将耗时操作,交给它来完成,这样节省了程序的执行时间。

2.celery的原理
celery开启时,可以指定多个工作进程,并发进行工作。我们需要指定一个消息队列,来存放待执行的任务,任务执行结果。
常见的消息队列有,RabbitMQ,Redis,Database,一般推荐RabbitMQ,Redis效率更高。

3.同步请求,异步请求
同步请求:所有逻辑在View中处理完毕后,返回response,在view处理任务时用户处于等待状态,直到页面返回结果。
异步请求:View中先返回response,再在后台处理任务,用户无需等待,可以继续浏览网站,任务处理完成时,再告知用户。

4.同步请求示例

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

import time


def send_mail(email):
    print("start send email to %s" % email)
    time.sleep(5)
    print("success")
    return True


def home(request):
    send_mail("[email protected]")
    return HttpResponse("end")

运行程序,发现直到5秒以后才会出现响应:

5.celery安装

pip install django-celery

6.redis安装
windows下,下载redis,解压,里面有个redis-server.exe执行程序,点击开启redis服务

7.异步请求示例
1)在django工程的settings.py文件中添加如下代码:

import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

INSTALLED_APPS = {
    ......
    'djcelery'
}

2)新建异步任务,在app目录下,新建tasks.py,代码如下:

from celery import task
import time


@task
def send_mail(email):
    print("start send email to %s" % email)
    time.sleep(5)
    print("success")
    return True

3)修改views.py,代码如下:

from django.http import HttpResponse

import time
from .tasks import send_mail


def home(request):
    send_mail.delay("[email protected]")
    return HttpResponse("end")

4)开启celery,异步任务处理进程,进程会自动搜索项目下的task任务,加入处理列表

python manage.py celery worker -c 4 --loglevel=info

5)启动web程序

python manage.py runserver

运行结果如下,页面会立即响应:

celery异步处理进程执行如下:

猜你喜欢

转载自www.cnblogs.com/shijingjing07/p/9166052.html