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队列

转载于:https://www.cnblogs.com/Ting-light/p/9947320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Celery 是一个用于 Django 框架的分布式任务队列工具。它结合了 Django 的 Web 开发能力和 Celery 的异步任务处理能力。通过使用 Celery,你可以将耗时的任务(如发送电子邮件、处理图像、执行定时任务等)从主线程中分离出来,以提高应用的性能和响应速度。 你可以通过以下步骤来集成 DjangoCelery: 1. 安装 Celery:在命令行中使用 pip 安装 Celery 库:`pip install celery` 2. 配置 Celery:在 Django 项目的 settings.py 文件中配置 Celery 相关的设置,主要包括消息代理器(message broker)的设置和任务结果存储的设置。 3. 创建任务:在 Django 项目中创建需要异步执行的任务。任务是一个 Python 函数,使用 `@task` 装饰器进行标记。 4. 启动 Celery Worker:在命令行中使用 `celery -A your_project_name worker --loglevel=info` 启动 Celery Worker,该命令会监听并执行任务队列中的任务。 5. 触发任务:在你的 Django 代码中调用任务函数,可以使用 `your_task.delay()` 来触发异步执行任务。 这样,当你触发任务时,它会被添加到 Celery 的任务队列中,并由 Celery Worker 异步执行。执行结果可以存储在指定的结果存储中,也可以通过回调函数获取。 注意:配置消息代理器和结果存储器时,你可以选择使用不同的后端,如 RabbitMQ、Redis、Amazon SQS 等。 以上是关于 Django Celery 的简要介绍和基本使用步骤,如果你有具体问题或需要更详细的指导,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值