django+celery +rabbitmq
celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度。采用典型的生产者-消费者模型
包含三部分:
1. 队列 broker :可使用redis ,rabbitmq ,或关系数据库作为broker
2.处理任务的消费者workers : 队列中有任务时就发出通知,worker收到通知就去处理
3.任务结果存储 backend: 存储任务的返回值
celery 4.2,django 1.11.7 ,rabbitmq 3.7.3,centos 6.5
事先需安装 rabbitmq , (安装rabbitmq前需安装erlang ,esl-erlang )
yum install rabbitmq-server
(开启 rabbitmq : systemctl start rabbitmq-server ; 查看rabbitmq的状态 ,切换到合适的目录与用户(一般为安装时的用户,目录一般为/usr/lib/bin): rabbitmqctl status ;)
安装celery包
pip install celery ==4.2
通常django的项目目录为
- proj /
- manage.py
-proj/
-__init__.py
-settings.py
- urls.py
-myapp/
-urls.py
-views.py
-models.py
首先要创建 一个celery实例 proj/proj/celery.py
from __future__import absolute_import,unicode_literals
import os
from celery import Celery
#为这个celery项目设置系统环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE','proj.settings')
#实例化Celery对象
app=Celery('proj')
#配置传入字符串而不是配置对象,使worker不需要在子进程中序列化配置对象;命名空间设置为’CELERY‘意味着所有celery相关的配置键值都应该以'CELERY_'开头
app.config_from_object('django.conf:settings',namespace='CELERY')
#自动加载task模块
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
#debug_task是一个复制它自己的request的信息的task ,使用bind=True简单地将其绑定到当前的task实例上。
2.在 proj/proj/__init__.py中导入第一步中创建的app,是为了保证django项目开启时就加载这个app,让后续的@shared_task装饰器可以使用它。
from __future__ import absolute_import,unicode_literals
from .celery import app as celery_app
__all__=('celery_app',)
3.创建myapp/tasks.py ,使用@shared_task装饰器
from __future__ import absolute_import,unicode_literals
from celery import shared_task
@shared_task
def add(x,y):
return x+y
@shared_task
def mul(x,y):
return x*y
@shared_task
def xsum(numbers):
return sum(numbers)
#一般将比较耗时的操作,定义在task.py中,这样在view中使用这个函数时,就可以异步调用,不必等操作完成再返回页面结果,而是可以异步调用完后直接进行下一步。
而这个操作会在子进程中继续执行,执行结果保存在队列中,也可指定保存在django的orm中
4.将celery队列的任务执行结果保存到 django的orm或缓存框架中
*需要安装 django-celery-results
pip install django-celery-results
*将其('django_celery_results')添加到settings.py的INSTALL_APPS中
*在数据库中创建保存celery结果的表
python manage.py migrate django_celery_results
*在settings.py为celery配置后端存储
CELERY_RESULT_BACKEND='django-db'
或
CELERY_RESULT_BACKEND='django-cache'
启动完django 的 manage.py runserver后运行 celery -A proj worker -l info 开启celery队列
django+celery +rabbitmq的更多相关文章
- Django+celery+rabbitmq实现邮件发送
一.环境 1.pip包 amqp==2.4.2 anyjson==0.3.3 billiard==3.6.0.0 celery==4.3.0 Django==2.2 dnspython==1.16.0 ...
- django+celery+ RabbitMQ实现异步任务实例
背景 django要是针对上传文件等需要异步操作的场景时,celery是一个非常不错的选择.笔者的项目就是使用了这个组合,这里就做一个备忘吧. 安装RabbitMQ 这个安装及使用我已经在前一 ...
- 如何使用django+celery+RabbitMQ实现异步执行
1)安装需要安装RabbitMQ.Celery和Django-celeryCelery和Django-celery的安装直接pip就好 2)修改settings.py在INSTALLED_APPS中加 ...
- 使用django+celery+RabbitMQ实现异步执行
http://www.yu180.com/group/view/259 推荐一个解决框架 https://github.com/maccman/juggernaut Realtime server p ...
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- Configuring and Running Django + Celery in Docker Containers
Configuring and Running Django + Celery in Docker Containers Justyna Ilczuk Oct 25, 2016 0 Commen ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- celery+RabbitMQ 实战记录2—工程化使用
上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法. 本文将从工程的角度介绍如何使用celery. 1.配置和启动RabbitMQ 请参考celery+RabbitMQ实战记录. ...
随机推荐
- SiteCore Experience Analytics-路径分析地图
路径分析地图 路径分析器是一个应用程序,允许您查看联系人在浏览网站时所采用的各种路径.您可以查看联系人在转换目标并与广告系列互动时所采用的路径,让您深入了解哪些路径为每次转化提供最佳参与价值,以及哪些 ...
- Python 第五阶段 学习记录之---Django 进阶
Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- Java面试题整理---JVM篇
1.JVM运行时内存区域划分? 2.内存溢出OOM和堆栈溢出SOE的案例.原因.排查及解决? 3.常用的JVM性能监控工具? 4.JVM参数设置? 5.类加载过程? 6.JVM内存 ...
- webpack学习入门
写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...
- Nginx优化详解-------超详细
一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cp ...
- ES5的完美继承
// 定义一个动物类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = functio ...
- ActiveReports 大数据分析报告:2018中国电影再次迎来黄金时代
回顾2018,中国电影市场收获颇丰.先是凭借春节档<红海行动>.<唐人街探案>双双实现30亿票房突破,而后暑期档火力全开,<我不是药神>.<西虹市首富> ...
- 【JS面试向】选择排序、桶排序、冒泡排序和快速排序简介
新年伊始,又到了金三银四的时候了.面对前端越来越多的算法面试题,我简单的整理了一下几种比较常见的数组排序方式,分别介绍其基本原理和优劣势.(ps:才疏学浅,希望大家可以在issues下面指出问题) 选 ...
- Flex外包公司——案例汇总
Flex做的案例汇总: http://flex.org/showcase/ http://taggraph.com/everybody http://demoprod.informationbuild ...
- CSS之user-select——设置标签中的文字是否可被复制
详细介绍请参考 http://www.css88.com/book/css/properties/user-interface/user-select.htm CSS样式 user-select:no ...