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异步处理进程执行如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架