Django 异步化库celery
Posted niuxingyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 异步化库celery相关的知识,希望对你有一定的参考价值。
首先要了解Django其实是个同步框架,那么多个用户发送请求时就会发生排队的情况上一个用户的请求完成后在进行下一个,这样会对影响用户体验,所有就要用到异步方法来解决。
首先我们要安装celery库
pip install celery celery的基础库
pip install celery-with-redis celery对redis的库
pip install django-celery celery对django的库
安装完成后要在settings.py内进行设置
#配置celery import djcelery djcelery.setup_loader() BROKER_URL = ‘redis://127.0.0.1:6379‘ CELERY_IMPORTS = (‘mymac.tasks‘)
还要在同级目录下建立一个 celert.py文件
#导包 import os import django from celery import Celery from django.conf import settings os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘mymac.settings‘) django.setup() app = Celery(‘mymac‘) app.config_from_object(‘django.conf:settings‘) app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True) def debug_task(self): print(‘Request: {0!r}‘.format(self.request))
然后建立一个py文件 创建celert异步方法
#导包 import time #导入异步任务 from celery.task import task #task使用装饰器用法 @task def say(x,y): #稍后用于方便查看异步 time.sleep(5) return x+y
在视图方法导入写好的异步方法,配置好相应路由访问即可
from django.shortcuts import render,redirect #导包 from django.http import HttpResponse,HttpResponseRedirect #导入类视图 from django.views import View #导入异步方法 from mymac.tasks import sayl def celery_test(request): #用delay传参 print(say.delay(‘123‘,‘123‘)) return HttpResponse(‘异步测试‘)
那怎么看是否是异步呢
我们需要在启动一个监听异步的服务,需要进入你的项目文件来启动服务命令是 celery -A mymac worker -l info mymac为项目名
然后我们去发送请求,连续刷新相应请求页面已达到模拟多个用户同时访问
这个时候我们可以看到多个请求在发送但是我们在方法里设置了延时5秒所有只发送并没有完成
5秒后我们看到都开始相继完成了
以上是关于Django 异步化库celery的主要内容,如果未能解决你的问题,请参考以下文章
Django-Python3-Celery 异步任务/定时任务