Django中Celery的实现

Celery介绍

Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。

上图展示的是Celery的架构,它采用典型的生产者-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)。

消息中间件:Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ。

任务执行单元:Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储:Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache。

实际应用中,用户从Web前端发起一个请求,我们只需要将请求所要处理的任务放入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务。

安装

pip install django  安装django

pip install celery==3.1.23 安装celery

pip install django-celery  安装django-celery

对Redis的支持需要额外的依赖。你可以用 celery[redis] 捆绑 同时安装 Celery 和这些依赖

pip install -U celery[redis]

pip install python-jenkins  安装jenkins

消息队列

yum install -y rabbitmq-server  安装rabbitmq

环境变量PATH加入/usr/lib/rabbitmq/bin

rabbitmq-plugins enable rabbitmq_management  启用web管理插件

chkconfig rabbitmq-server on  开机自启动

/etc/init.d/rabbitmq-server start  启动RabbitMQ

增加用户

rabbitmqctl add_user shhnwangjian 123456

rabbitmqctl set_user_tags shhnwangjian administrator

命令执行成功后,rabbitmq-server就已经安装好并运行在后台了。

WEB页面访问:http://ip地址:15672/

另外也可以通过命令rabbitmq-server来启动rabbitmq server以及命令rabbitmqctl stop来停止server。

django中celery实现

创建项目和app

django-admin.py startproject celery-wj

cd celery-wj

django-admin.py startapp app01

配置settings.py

当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task。

BROKER_URL和CELERY_RESULT_BACKEND分别指代你的Broker的代理地址以及Backend(result store)数据存储地址。

在Django中如果没有设置backend,会使用其默认的后台数据库用来存储数据。注意,此处backend的设置是通过关键字CELERY_RESULT_BACKEND来配置,与一般的.py文件中实现celery的backend设置方式有所不同。一般的.py中是直接通过设置backend关键字来配置,如下所示:

test = Celery('tasks', backend='redis://10.10.83.162:16379/0', broker='redis://10.10.83.162:16379/9')

Django下要查看其他celery的命令,包括参数配置、启动多worker进程的方式都可以通过python manage.py celery --help来查看:

创建一个task

# -*- coding: utf-8 -*-

from celery import task

@task

def add(x, y):

return x + y

注意:与一般的.py中实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名。

views.py

# -*- coding: utf-8 -*-

from django.shortcuts import HttpResponse, render, redirect, HttpResponseRedirect

from app01 import tasks

def add_test(request):

result = tasks.add.delay(2, 2)

print result

if result.ready():

print "Task has run"

if result.successful():

print "Result was: %s" % result.result

else:

if isinstance(result.result, Exception):

print "Task failed due to raising an exception"

raise result.result

else:

print "Task failed without raising exception"

else:

print "Task has not yet run"

return HttpResponse(result)

urls.py

from django.conf.urls import url

from django.contrib import admin

from app01 import views

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^add/$', views.add_test, name='add'),

]

#先启动服务

python manage.py runserver 0.0.0.0:9008

#再启动worker

python manage.py celery worker -c 4 --logievel=info

通过terminal测试task

python manage.py shell

>>> from app01 import tasks

>>> tasks.add.delay(3,5)

通过页面访问测试task

Celery的可视化监控工具flower

1.安装flower

pip install flower

2.启动

python manage.py celery flower --port=9008(默认是5555端口)

3.帮助

python manage.py celery flower --help

4.可视化页面

http://localhost:9008

Django中如何使用django-celery完成异步任务:http://www.weiguda.com/blog/73/

celery 可视化_Django中Celery的实现介绍(一)相关推荐

  1. celery 可视化_在Flask中使用Celery进行多任务分布执行

    关键字:Flask, Redis, RabbitMQ, Celery, Broker, Backend 前言 在后端服务器有时候需要处理耗时较长的任务,例如发送电子邮件,在处理这些任务时,这个线程就处 ...

  2. pythondjango项目集成_Django集成celery实战小项目

    上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发. 本系列文章的开发环境: window 7 + python2.7 + pychar ...

  3. Django 中celery的使用

    1.django应用Celery django框架请求/响应的过程是同步的,框架本身无法实现异步响应. 但是我们在项目过程中会经常会遇到一些耗时的任务, 比如:发送邮件.发送短信.大数据统计等等,这些 ...

  4. 任务队列:celery快速入门及django中celery的用法

    文章目录 一.celey的简介 1.1 celery的工作机制 1.2 安装celery(5.2版本) 二.celery快速入门 2.1 选择broker 2.2 celery的简单使用 2.2.1 ...

  5. Blender中的Python脚本介绍学习教程

    Blender中的Python脚本介绍学习教程 MP4 |视频:h264,1280×720 |音频:AAC,48000 Hz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:1.63 ...

  6. python在日常工作处理中的应用-python在工作中的应用场景介绍

    python在工作中的应用场景介绍 发布时间:2020-04-21 14:44:30 来源:亿速云 阅读:277 作者:小新 今天小编给大家分享的是python在工作中的应用场景介绍,相信很多人都不太 ...

  7. Numpy中np.mashgri() 函数介绍及2种应用场景

    @[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...

  8. anaconda怎么使用python包_Anaconda中python包的介绍与使用方法

    Anaconda中python包的介绍与使用方法 目录: 1.包的定义 2.常用包管理器 3.包管理器的使用方法 4.数据科学常用的包 1.包的定义 由多个和同一功能相关的模块组成,通常为含有_ini ...

  9. 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志

    by Ritvik Khanna Ritvik Khanna着 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志 (How to use Elastic ...

最新文章

  1. Python合并字典的七种方式!
  2. opencv学习笔记16:梯度运算之scharr算子及其函数使用
  3. android 引入 .so,android studio引入so库方法(示例代码)
  4. display:table-cell自适应布局下连续单词字符换行
  5. python可视化报表制作教程_如何使用Python快速制作可视化报表
  6. 第55课 分解质因数 《小学生C++编程入门》
  7. Qt文档阅读笔记-Q_PROPERTY解析及实例
  8. php输出mysql查询,MySQL查询和PHP输出
  9. django,cbv,模板层
  10. python web 并发 性能_Python Web Server的性能测试
  11. Python之路(一)初识Python
  12. Seoer,牵起用户与搜索引擎双手的魔术师
  13. 51nod 1838
  14. 手机扫描识别Vin码识别
  15. 【Project】基于LD3320 的智能语音控制系统
  16. 正态总体统计量的分布
  17. 二项分布、poisson分布、gamma分布一些关系的笔记
  18. 2016年虾神公众号预告
  19. MySQL下执行*.sql文件
  20. Appium简介与原理

热门文章

  1. java定义说话方法_类定义的基本形式_Java语言程
  2. 倒计时小工具_送你3个倒数计日的小程序,让你不再遗忘重要事
  3. delphi中richedit中光标如何定位到最后_嵌入式开发之Linux系统中Vi编辑器的使用
  4. python读取大文件的坑_如何在Python中读取大文件的特定部分
  5. MySQL 8.0开始Group by不再排序
  6. Pytest标记用例失败之xfail
  7. 移动开发day1_过渡_2d转换_3d立体
  8. Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音
  9. container-with-most-water(最大蓄水问题)
  10. 学习笔记(十一)——数据库的索引碎片、计划缓存、统计信息