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("shijingjing07@126.com")
    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("shijingjing07@126.com")
    return HttpResponse("end")

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

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

5)启动web程序

python manage.py runserver

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

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

posted on   迪米特  阅读(458)  评论(1编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示