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秒后我们看到都开始相继完成了

原文地址:https://www.cnblogs.com/Niuxingyu/p/10557594.html

时间: 2024-08-29 08:24:02

Django 异步化库celery的相关文章

异步任务利器Celery(二)在django项目中使用Celery

Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py 首先建立proj/proj/celery.py文件: from __future__ import absolute_import, unicode_literals import os from celery import Cele

异步任务利器Celery(一)介绍

django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要求 ,异步任务是很好的解决方法,有一个使用python写的非常好用的异步任务工具Celery. broker.worker和backend Celery的架构由三部分组成,消息中间件(broker),任务执行单元(worker)和任务执行结果存储(result backends)组成. 应用程序调用

Django的标准库django.contrib包介绍

前面我们激活了 Django 后台,我们要使用自动化的站点管理工具(django.contrib.admin),所以最好对Django.contrib进行了解,它是啥?它是一个强大的功能包,是Django的标准库. Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包. 在 django.contrib 中对函数的类型并没有强制要求 .其中一些包中带有模型(因此需要你

使用消息队列异步化系统

使用消息队列异步化系统 基于Spring与ActiveMQ的配置实现方案 前言 前期为了快速开发,项目结构较为混乱,代码维护与功能扩展都比较困难,为了方便后续功能开发,最近对项目进行的重构,顺便在重构的过程中将之前的部分操作进行了异步处理,也第一次实际接触了JMS与消息队列.项目中采用的消息中间件为ActiveMQ. 什么是JMS Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分

[转]向facebook学习,通过协程实现mysql查询的异步化

FROM : 通过协程实现mysql查询的异步化 前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能.由于facebook实现的比较早,他们不得不对php进行hack才得以实现.现在的php5.5,已经无需hack就可以实现了.对于一个web网站的性能来说,瓶颈多半是来自于数据库.一般数据库查询会在某个请求的整体耗时中占很大比例.如果能提高数据库查询的效率,网站的整体响应时间会有很大的下降.如果能实现mysql查询的异步化,就可以实现多条sql语句同

异步化

异步化最近在处理交易下单的流程:用户下单请求 <-> 前端控制层 <-> 业务逻辑层 <-> 同步调用 <-> 订单接口服务 <-> 数据层以上即为目前用户下单的处理流程,业务逻辑层使用同步的方式调用接口服务,直到订单接口服务响应或者超时.查看了很多资料说加入消息队列的机制,即可实现异步.首先将用户的下单请求添加消息队列中,然后订单接口服务从消息队列中获取请求消息进行处理.此时有两种处理方法:1.前端系统在将请求添加到队列后,是一直在等待响应,还

使用JDK1.8 CompletableFuture异步化任务处理

0.概述 服务端编程的一个经典场景是在接收和处理客户端请求时,为了避免对每一个请求都分配线程而带来的资源开销,服务一般会预先分配一个固定大小的线程池(比如Tomcat connector maxThreads),当客户端请求到来时,从线程池里寻找空闲状态的线程来处理请求,请求处理完毕后会回到线程池,继续服务下一个请求.当线程池内的线程都处于繁忙状态时,新来的请求需要排队直到线程池内有可用的线程,或者当超出队列容量后(Tomcat connector acceptCount属性)请求被拒绝(con

Apache Ignite 改装(一) -- 服务异步化支持

本文假设读者了解Apache Ignite,阅读过ignite service grid的官方文档,或使用过ignite的service grid,本文同样假设读者了解 java的CompletionStage的相关用法.本文涉及的ignite版本为2.4.0. 使用Apache Ignite的Service grid作为微服务开发框架, 通常是如下定义和实现Service的: 服务接口: public interface MyService { public String sayHello(S

django 异步 查看 服务器日志 | 利用 channels==2.0.2

django 异步 查看 服务器日志 实例 可以查看我编写的这个项目:https://github.com/hequan2017/chain 模块 需要安装以下模块 安装后会有一个版本号报错,不影响 channels==2.0.2 channels-redis==2.1.0 amqp==1.4.9 anyjson==0.3.3 asgi-redis==1.4.3 asgiref==2.3.0 async-timeout==2.0.0 attrs==17.4.0 cd /tmp/ wget htt