celery 可视化_Django中Celery的实现介绍(一)_weixin_39783426的博客-程序员秘密

技术标签: celery 可视化  

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/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39783426/article/details/111546416

智能推荐

调用已有BOTP下推生成单据_chenzhiqi3771的博客-程序员秘密

1、XxxListUI上添加按钮及方法按钮方法如下://action方法public void actionPerformed(ActionEvent e0) { checkSelected(); java.util.ArrayList idList = getSelectedId...

Pytorch迁移学习实现CNN图片分类_LotusQ的博客-程序员秘密_pytorch迁移学习实现图像分类

文章目录0 前言1 实现数据预处理模型构建训练&测试2 总结0 前言1 实现数据预处理模型构建训练&测试2 总结

4.5 matlab三维曲面(mesh、fmesh、meshc、meshz、surf、fsurf、surfc、surfl)_平平无奇的小女子~的博客-程序员秘密_三维曲面

1、平面网格数据的生成(1)利用矩阵运算生成(2)利用meshgrid函数生成[X,Y]=meshgrid(x, y);其中,参数x、y为向量,存储网格点坐标的X、Y为矩阵。%方法1x = 2:6; %五个元素的行向量y = (3:8)'; %六个元素的列向量X = ones(size(y))*x; %矩阵X的每一行都是向量x,行数等于向量y的元素的个数Y = y*ones(size(x)); %矩阵Y的每一行都是向量y,列数等于向量的元素的个数%结果>> X

天才少年自制芯片:媲美英特尔 4004 CPU_Blink小精灵的博客-程序员秘密

本文转载自IT之家IT之家8 月 18 日消息 如果你认为自制计算机芯片是不可能的,那你就错了。“天才少年”萨姆-泽鲁夫(Sam Zeloof)刚刚制作了他的第二个自制芯片,该芯片具有 1200 个晶体管,使用的技术与英特尔在 20 世纪 70 年代制作其第一个 CPU 时的相同。IT之家了解到,泽鲁夫在 2018 年就制造了他的第一个芯片,名为 Z1,使用 5 微米的 PMOS 工艺。他在高中时就开始制造芯片,并在家里学习了制造芯片所需的所有信息和机器。来到 2021 年,泽鲁夫.

C语言各种数据类型取值范围_smile_zhangwj的博客-程序员秘密_c语言数据类型范围

转自:http://blog.csdn.net/mafuli007/article/details/7325510 速查表:char -128 ~ +127 (1 Byte)short -32768 ~ + 32767 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes...

【数据挖掘】二手车交易价格预测(二)突破baseline三板斧_7TribeZ的博客-程序员秘密_二手车交易价格预测数据挖掘

目录突破baseline三板斧1.数据清洗和特征工程数据清洗特征工程2.模型参数调节3.模型集成突破baseline三板斧1.数据清洗和特征工程数据清洗举例特征工程如 二手车数据集中有 年月日的时间特征维度,提取年份可以看到价格随着年份 递增而递增。举例2.模型参数调节...

随便推点

css 根据不同屏幕设置间距_css的外间距如何设置?css外间距的设置方法(附实例)..._zljchris的博客-程序员秘密

css盒模型中有四种元素,分别是内间距、外间距、内容还有边框。这四种定义了盒模型的使用,今天我们就来说说关于css盒模型的外间距的使用吧css的外间距如何设置?我们的外间距是属于css盒模型之中的一种,那么现在我们来看看外间距都是怎么设置的吧。margin: 是一个简写属性,可以一个声明中设置所有外边距属性。来看个完整外边距的实例:PHP中文网.diyi{border:solid #D91C1F ...

Winfrom重绘ComboBox-DropDownList样式_风干牛肉巴旦木的博客-程序员秘密

原生winfrom的ComboBox 样式设置为DropDownList 样式固定,且大多数重绘多为重绘下拉选择框,此代码主要重绘ComboBox的边框 背景色等。/// <summary>/// 主要为DropDownList样式重绘(特定性较强)/// </summary>public partial class EVCombobox : ComboBox{ public EVCombobox() { InitializeComponen

84. 柱状图中最大的矩形_Mancuoj的博客-程序员秘密

DescriptionSimulation思路分析:大眼一瞧,柱状图高高低低,计算面积,这不是接雨水吗?单调栈确认!判断单调性?可以看到图中都是遇到小值需要出栈的时候才计算面积,可以确认是递增的栈,也就是栈顶元素最大。单调性确定!直接三板斧给出:单调栈存入下标计算宽度,根据出栈的最小值计算高度(具体思路上篇文章已经详细给出,在此不赘述)删改后可得:for (int i = 0; i < h.size(); i++) { while (!stk.empt

PHP超低内存遍历目录文件和读取超大文件的方法_华尔街之猫的博客-程序员秘密

这不是一篇教程,这是一篇笔记,所以我不会很系统地论述原理和实现,只简单说明和举例。前言我写这篇笔记的原因是现在网络上关于 PHP 遍历目录文件和 PHP 读取文本文件的教程和示例代码都是极其低效的,低效就算了,有的甚至好意思说是高效,实在辣眼睛。这篇笔记主要解决这么几个问题:PHP 如何使用超低内存快速遍历数以万计的目录文件?PHP 如何使用超低内存快速读取几百MB甚至是GB级文件?顺便解决哪天我忘了可以通过搜索引擎搜到我自己写的笔记来看看。(因为需要 PHP 写这两个功能的情况真的

整数拆分 python_LeetCode 343. 整数拆分 | Python_阿扣全的博客-程序员秘密

343. 整数拆分题目给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。解题思路思路:推导这里,我们用数学推导...

tensorflow 2.0 神经网络与全连接层 之 全连接层 (Class API)_TransientYear的博客-程序员秘密

5.3 全连接层深度学习发展基础全连接层多层全连接层深度学习发展基础大数据激活函数DropOutBatchNormResNet初始化深度学习框架 caffe/Pytorch/tensorflow计算能力 (显卡)…全连接层x = tf.random.normal([4, 784])net = tf.keras.layers.Dense(512)out = net(...

推荐文章

热门文章

相关标签