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的更多相关文章

  1. 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 ...

  2. django+celery+ RabbitMQ实现异步任务实例

    背景   django要是针对上传文件等需要异步操作的场景时,celery是一个非常不错的选择.笔者的项目就是使用了这个组合,这里就做一个备忘吧. 安装RabbitMQ   这个安装及使用我已经在前一 ...

  3. 如何使用django+celery+RabbitMQ实现异步执行

    1)安装需要安装RabbitMQ.Celery和Django-celeryCelery和Django-celery的安装直接pip就好 2)修改settings.py在INSTALLED_APPS中加 ...

  4. 使用django+celery+RabbitMQ实现异步执行

    http://www.yu180.com/group/view/259 推荐一个解决框架 https://github.com/maccman/juggernaut Realtime server p ...

  5. django celery异步框架

    描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用.   安装django和celery pip install django pip install celery pip inst ...

  6. Configuring and Running Django + Celery in Docker Containers

    Configuring and Running Django + Celery in Docker Containers  Justyna Ilczuk  Oct 25, 2016  0 Commen ...

  7. Django+Celery+xadmin实现异步任务和定时任务

    Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...

  8. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  9. celery+RabbitMQ 实战记录2—工程化使用

    上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法. 本文将从工程的角度介绍如何使用celery. 1.配置和启动RabbitMQ 请参考celery+RabbitMQ实战记录. ...

随机推荐

  1. centos----------centos下如何安装phpstorm

    1.首先打开centos下的谷歌浏览器,找到phpstorm官网下载linux版本.PhpStorm-2016.3.2.tar.gz 2.然后gunzip PhpStorm-2016.3.2.tar. ...

  2. #WEB安全基础 : HTTP协议 | 0x4 各种协议与HTTP协议的关系(一个报文的旅行)

    报文是怎么旅行的呢? 在网络中有很多引路人,如HTTP协议,IP协议.TCP协议.DNS协议以及ARP协议. 请看下图,演绎一个报文的旅程 这就是一个报文的完整请求过程,请加以理解并记忆 //本系列教 ...

  3. Java基础(basis)-----关键字final和static的作用

       1.关键字final      final修饰类:这个类就不能被继承      final修饰方法:不能被重写      final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值.习惯 ...

  4. select报错

    query = query.Where(c => c.MfcKey==temp); int hhho = query.Count(); query = from q in query join ...

  5. IP通信基础学习第二周

    此周的课程学习应该算是我对此科目真正学校生涯的开始吧,尽管我对该科目仍感到很陌生. 课程一开头,老师就给我们简单的介绍了网络的定义.发展及其分类,重点讲了网络拓扑结构及其在局域网上具体的分层情况.该部 ...

  6. C++的重载操作符(operator)介绍(转)

    本文主要介绍C++中的重载操作符(operator)的相关知识. 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将 ...

  7. dart字符串处理

    1.字符串创建(1)使用单引号,双引号创建字符串(2)使用三个引号或双引号创建多行字符串(3)使用r创建原始raw字符串(转义字符等特殊字符会输出出来,而不会自动被转义) (1)例如:String s ...

  8. oracle addm报告

    可通过@?/rdbms/admin/addmrpt.sql生成ADDM报告 ADDM本身并不是很实用,抽象级别太高,用于初步判断系统配置/IO子系统是否合理和快速参考,一个报告截图如下: 任务 '任务 ...

  9. 自制操作系统Antz(2)——进入保护模式 (上) jmp到保护模式

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.htm Linux内核源码分析地址:https://www.cnblogs.c ...

  10. mongodb主从(副本集附仲裁节点)部署带认证模式

    环境:OS:CentOS 7DB:3.0.15机器角色:192.168.1.134:10001 主192.168.1.135:10002 从192.168.1.135:10003 仲裁节点 1.下载相 ...