首先要了解Django其实是个同步框架,那么多个用户发送请求时就会发生排队的情况上一个用户的请求完成后在进行下一个,这样会对影响用户体验,所有就要用到异步方法来解决。

首先我们要安装celery库

pip install celery   celery的基础库

pip install celery-with-redis  celery对redis的库

pip install django-celery  celery对django的库

安装完成后要在settings.py内进行设置

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo',
'djcelery' # 添加 djcelery应用
)
#配置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('',''))
return HttpResponse('异步测试')

那怎么看是否是异步呢

我们需要在启动一个监听异步的服务,需要进入你的项目文件来启动服务命令是  celery -A mymac worker -l info   mymac为项目名

然后我们去发送请求,连续刷新相应请求页面已达到模拟多个用户同时访问

这个时候我们可以看到多个请求在发送但是我们在方法里设置了延时5秒所有只发送并没有完成

5秒后我们看到都开始相继完成了

celery内也有定时任务方法

#导入定时任务库
from celery.decorators import periodic_task
#利用参数来设置任务周期
@periodic_task(run_every=10)
def some_task():
print('每十秒执行一次')
time.sleep(5)
print('执行完毕')
return True

设置好后就会自动运行

也可以在  celery -A mymac worker -l info  监听异步内监听因为它本身也是异步的。

还可以在  celery -A mymac beat -l info  内查看定时任务。

Django 异步化库celery和定时任务的更多相关文章

  1. Django异步任务之Celery

    Celery celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做 ...

  2. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

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

    Celery 4.0支持django1.8及以上的版本,低于1.8的项目使用Celery 3.1. 一个django项目的组织如下: - proj/ - manage.py - proj/ - __i ...

  4. Django中使用Celery实现定时任务(用djcelery)

    一.引言 Django是python语言下的一个比较热门的Web框架,越来越多的企业和开发者使用Django实现自己的Web服务器.在Web服务器开发过程中,有时候我们不仅仅是要实现Web服务器端和用 ...

  5. django 异步任务实现及Celery beat实现定时/轮询任务

    Celery定时任务 requirements celery==3.1.25 异步任务 django-celery==3.2.2 定时任务管理包 redis==2.10.6 django-redis- ...

  6. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

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

    django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要 ...

  8. 异步分发任务celery

    Celery简介 Celery是一个功能完备即插即用的任务队列.它使得我们不需要考虑复杂的问题,使用非常简单. celery适用异步处理问题,当遇到发送邮件.或者文件上传, 图像处理等等一些比较耗时的 ...

  9. Celery完成定时任务

    1.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 celery支持linux,如果windows使用celery ...

随机推荐

  1. 重写TreeView模板来实现数据分层展示(二)

    前面一片文章实现TreeView的基本的模板重写,那么照着这个思路,我们再来写一个稍稍复杂的TreeView ,其它的内容都和前面系列内容相似,还是和之前文章介绍的一样,首先看看做出的DEMO的最终样 ...

  2. Java8新特性之Collectors

    参考:Java8新特性之Collectors 在第二天,你已经学习了Stream API能够让你以声明式的方式帮助你处理集合.我们看到collect是一个将管道流的结果集到一个list中的结束操作.c ...

  3. python设计模式第二十二天【备忘录模式】

    1.应用场景 (1)能保存对象的状态,并能够恢复到之前的状态 2.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ class Originator ...

  4. PHP的爬虫框架

    Beanbun PHPSpider PHPQuery QueryList PHPCrawer Snoopy

  5. java构造器和构建器

    本文摘自:https://blog.csdn.net/wh2827991/article/details/79013115 在实例化一个类的过程中,通常会遇到多个参数的构造函数,但如果有些参数是非必需 ...

  6. java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.jav

    在整合spring和mybatis在执行数据库操作的时候报出了: java.lang.AbstractMethodError: org.mybatis.spring.transaction.Sprin ...

  7. 使用proxychains 代理终端

    最近在国外的vps上搭建了一个ss服务器,在浏览器里面设置socks5代理上网很方便, 但是终端里面却只支持http方式的代理配置,网上有socks转http代理的方式,但是最近发现一个更为简单的方式 ...

  8. SQL Server 一张图让你秒懂联合表查询

  9. 两种从spring容器获取bean方式

  10. hdu-4300(kmp或者拓展kmp)

    题意:乱七八糟说了一大堆,就是先给你一个长度26的字符串,对应了abcd....xyz,这是一个密码表.然后给你一个字符串,这个字符串是不完整的(完整的应该是前半部分是加密的,后半部分是解密了的),然 ...