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的主要内容,如果未能解决你的问题,请参考以下文章

Celery+python+redis异步执行定时任务

使用 celery 为 Django 应用程序异步执行任务

Django-Python3-Celery 异步任务/定时任务

Celery 3 版本 定时执行与 异步执行 | Django 案例

Django中使用celery完成异步/耗时/后台任务

Celery学习--- Celery 最佳实践之与django结合实现异步任务