• 情景:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件、手机验证码等
  • 使用celery后,情况就不一样了
  • 解决:将耗时的程序放到celery中执行
  • 点击查看celery官方网站
  • 点击查看celery中文文档
  • celery名词
    • 任务task:就是一个Python函数
    • 队列queue:将需要执行的任务加入到队列中
    • 工人worker:在一个新进程中,负责执行队列中的任务
    • 代理人broker:负责调度,在布置环境中使用redis
  • 安装包
celery==3.1.25
celery-with-redis==3.0
django-celery==3.1.17

示例

  • 在booktest/views.py文件中创建视图sayhello
import time
...
def sayhello(request):print('hello ...')time.sleep(2)print('world ...')return HttpResponse("hello world")
  • 在booktest/urls.py中配置
    url(r'^sayhello$',views.sayhello),
  • 启动服务器,在浏览器中输入如下网址
http://127.0.0.1:8000/sayhello/
  • 在终端中效果如下图,两次输出之间等待一段时间才会返回结果

  • 在test6/settings.py中安装
INSTALLED_APPS = (...'djcelery',
}
  • 在test6/settings.py文件中配置代理和任务模块
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/2'
CELERY_IMPORTS = ('booktest.task')
  • 在booktest/目录下创建task.py文件
import time
from celery import task@task
def sayhello():print('hello ...')time.sleep(2)print('world ...')
  • 打开booktest/views.py文件,修改sayhello视图如下
from . import task
...
def sayhello(request):# print('hello ...')# time.sleep(2)# print('world ...')task.sayhello.delay()return HttpResponse("hello world")
  • 执行迁移生成celery需要的数据表
python manage.py migrate
  • 生成表如下

  • 启动Redis,如果已经启动则不需要启动
sudo service redis start
  • 启动worker
python manage.py celery worker --loglevel=info
  • 启动成功后提示如下图

  • 打开新终端,进入虚拟环境,启动服务器,刷新浏览器
  • 在旧终端中两个输出间仍有时间间隔

  • 运行完成后如下图,注意两个终端中的时间,服务器的响应是立即返回的

  • 打开booktest/task.py文件,修改为发送邮件的代码,就可以实现无阻塞发送邮件
#coding=utf-8
from django.conf import settings
from django.core.mail import send_mail
from celery import task@task
def sayhello():msg='<a href="http://www.itcast.cn/subject/pythonzly/index.shtml" target="_blank">点击激活</a>'send_mail('注册激活','',settings.EMAIL_FROM,['xinlan88@163.com'],html_message=msg)

Django完成异步工具——celery相关推荐

  1. Celery+django+redis异步执行任务

    Celery+django+redis异步执行任务 本文用到的各工具版本: celery 4.0.2 django 1.10.3 redis 3.2.6 特别注意: 如果你的项目是django框架,那 ...

  2. django python3 异步_详解配置Django的Celery异步之路踩坑

    人生苦短,我用python. 看到这句话的时候,感觉可能确实是很深得人心,不过每每想学学,就又止步,年纪大了,感觉学什么东西都很慢,很难,精神啊注意力啊思维啊都跟不上.今天奶牛来分享自己今天踩的一个坑 ...

  3. Django使用supervisor管理celery和uwsgi实践记录 uwsgi BACKOFF Exited too quickly (process log may have details)

    Django使用supervisor管理celery和uwsgi实践记录 安装下载supervisor不用多说. 直接上配置文件: vir_path标识虚拟环境路径 pro_path标识项目路径 全部 ...

  4. Django Admin 管理工具, 以及问题解决

    http://www.runoob.com/django/django-admin-manage-tool.html 登录进去却提示"你无权修改任何东西" urls.py 中加入一 ...

  5. Django admin 管理工具

    Django admin 管理工具 1 admin组件的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 se ...

  6. 170-路飞11-分布式异步框架Celery的使用

    昨日回顾 1 redis的列表操作lpushllenlinsertlsetlremlpoplrange # 使用它,自定义增量迭代blpop # 分布式自定义增量迭代 2 redis通用方法-dele ...

  7. python django开发工具_Python和Django web开发工具pycharm介绍

    今天无意中发现了这个软件,适用了一下不错.PyCharm 具有智能代码编辑器,能理解 Python 的特性并提供卓越的生产力推进工具:自动代码格式化.代码完成.重构.自动导入和一键代码导航等 PyCh ...

  8. Debian+Django+uWsgi+nginx+mysql+celery

    下载系统各种依赖 nano /etc/apt/sources.list 在Debian中使用apt-get安装软件包时经常会提示让你插入netinst的光盘: Media change: please ...

  9. django 1.11.6—— Celery

    https://segmentfault.com/a/1190000008022050 1. 环境 python==3.6djang==1.11.6 # 1.8, 1.9, 1.10应该都没问题cel ...

最新文章

  1. jquery遍历table
  2. 积木赛尔号机器人_赛尔号11年,圣灵谱尼从章鱼变花臂少年,最终成为了老父亲...
  3. centos7.6成功安装nerdtree插件
  4. 取某个日期所在周的任意一天日期
  5. php函数知识点,php入门学习知识点七 PHP函数的基本应用_php基础
  6. QQ协议TEA加密解密代码 C#
  7. 小型网络的组建及排错
  8. 【软件质量】软件可移植性
  9. lsoci mysql_flask项目从sqlite3升级的mysql数据库
  10. 2016年度最受欢迎中国开源软件评选
  11. 数据科学入门与实战:Seaborn002热力图等
  12. 邮政管理部门发话:未获用户同意投放快递柜属违法行为
  13. 连Spring源码都没看过,你怎么敢在简历上写“精通”?
  14. 深度学习 --- 随机神经网络详解(玻尔兹曼机学习算法、运行算法)
  15. eclipse导入Java源码
  16. c fread 快读 详解_热量计算公式及例题详解
  17. Show出你的高超技能 首届“中国高性能云计算创新大赛”要开赛啦!
  18. OPPO手机里面的快应用是什么
  19. 怎样用键盘控制电脑的光标
  20. 项目进度管理服务器,工程项目进度管理软件Asta Powerproject——成功项目背后的力量...

热门文章

  1. 学习《PythonWeb开发实战(董伟明)》中文PDF+源代码
  2. Spring的核心机制依赖注入,Junit测试与Java基础Getter和Setter两种方法意义——2017.07.26...
  3. bash/shell编程学习(2)
  4. Cassandra1.2文档学习(12)—— hint机制
  5. FC网络学习笔记02 -网络配置方法
  6. 深入分析驴子系列(2)
  7. boost::split()的使用方式
  8. Android中的动画有哪几类?各自的特点和区别是什么?
  9. hive 语句总结_Hive常用命令总结
  10. linux下根据端口查进程,linux根据进程查端口,根据端口查进程