一.这里不再详细述说 django 框架中如何使用celery, 重点放在如何实现创建多个队列, 并指定队列存放异步任务

笔者使用   django-celery==3.2.2 模块, 配置项及配置参数, 启动方式请查看官方文档.

二.在settings.py配置文件中添加配置, 开启多队列(前提是已经配置好启动celery worker的相关配置项, 建议使用多队列, 一个队列对应一个worker, 而不是多个worker对应一个队列)

from kombu import Exchange, Queue

# 定义celery各个队列的名称
CELERY_QUEUES = (
Queue("import_task", Exchange("import_task"), routing_key="task_a"),
Queue("normal_task", Exchange("normal_task"), routing_key="task_b")
) CELERY_ROUTES = {
"tasks.taskA": {"queue": "import_task", "routing_key": "task_a"},
"tasks.taskB": {"queue": "normal_task", "routing_key": "task_b"}
} # 注意: 使用 redis 作为 broker 时, 队列名称,Exchenge名称,queue名称 必须保持一致 """
这里只定义了两个队列
import_task: 用来存放需要优先执行的重要任务, 如果队列仍然存在堵塞的情况, 可以根据更小颗粒度划分出更多的队列
normal_task: 用来存放执行级别较低的任务, 该类型的任务可以允许存在较长时间的延迟
"""

三.指定队列启动worker

进入manage.py 文件所在目录下, 执行以下命令, 开启worker, 因为我使用了django-celery模块, 所以可以使用manage.py 入口文件进行启动:    -Q  queue_name   指定队列名称

python manage.py celery worker -B -l info -Q import_task
python manage.py celery worker -B -l info -Q normal_task
python manage.py celery worker -B -l info -Q celery

如果需要后台运行, 可在命令的最后加上 "&", 如果使用supervisor进行进程管理, 则不可以加上 "&", docker部署请自行参考docker 官方文档对 dockerfile 使用方式的说明.

注意: 这里添加了一个使用 celery 队列的worker, 因为在进行任务发送时, 如果没有指明队列, 将默认发送至队列名称为celery的队列中.

四.调用异步任务

from .tasks import send_emailMes_task

send_emailMes_task.apply_async((params_1, params_2), {"params_3_key": params_3_value}, queue="import_task")

这里笔者导入了自定义的需要异步执行的任务: send_emailMes_task

需要注意的是:

使用异步任务对象下的apply_async(), 而不是delay(), 后者无法指定队列名称

参数:  (params_1, params_2),  使用这样的方式传递实参, 需要使用*agrs接收

参数:  {"active_token":token},  使用这样的方式传递命名参数, 需要使用**kwagrs接收

参数:  queue,  指定将任务发送至那个队列

五.完成以上操作以后就可以进行程序的执行了.

 
 
 

django-celery 创建多个broker队列 异步执行任务时指定队列的更多相关文章

  1. Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)

    系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe ...

  2. Python开发程序:RPC异步执行命令(RabbitMQ双向通信)

    RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

  3. Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)

    RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

  4. Django --- celery异步任务与RabbitMQ模块

    一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...

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

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

  6. django celery的分布式异步之路(一) 起步

    如果你看完本文还有兴趣的话,可以看看进阶篇:http://www.cnblogs.com/kangoroo/p/7300433.html 设想你遇到如下场景: 1)高并发 2)请求的执行相当消耗机器资 ...

  7. Django+Celery 执行异步任务和定时任务

    celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...

  8. django celery异步框架

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

  9. 使用django + celery + redis 异步发送邮件

    参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7  +  python3.6.1 + django2.0.1  ...

随机推荐

  1. (转)在T-SQL语句中访问远程数据库

    https://www.cnblogs.com/lgx5/p/7821887.html 1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasou ...

  2. 使用pandas进行数据预处理01

    数据预处理有四种技术:数据合并,数据清洗,数据标准化,以及数据转换. 数据合并技术:(1)横向或纵向堆叠合数据 (2)主键合并数据 (3)重叠合并数据 1.堆叠合并数据: 堆叠就是简单的把两个表拼接在 ...

  3. 十三、Visitor 访问者设计模式

    需求:将数据结果与处理分开 设计原理: 代码清单: Element public interface Element { void accept(Visitor visitor); } Entry p ...

  4. Ambari2.7.3 和HDP3.1.0搭建Hadoop集群

    一.环境及软件准备 1.集群规划   hdp01/10.1.1.11 hdp02/10.1.1.12 hdp03/10.1.1.13 hdp04/10.1.1.14 hdp05/10.1.1.15 a ...

  5. [leetcode]6. ZigZag Conversion字符串Z形排列

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  6. 20175234 2018-2019-2 《Java程序设计》第五周学习总结

    20175234 2018-2019-2 <Java程序设计>第五周学习总结 接口实现流程简述 interface定义接口 接口只能定义常量和方法,方法不能是具体的 实现接口时,需类来完成 ...

  7. Android,重新出发!

    接触Android差不多一年,工作也有快半年的时间了. 现在回头看看自己写的代码,虽然功能可以实现,但是还是有很多不足的地方. 比如代码结构,一个类中的代码过多,知道这样做不好,但是不知道怎么把这些 ...

  8. python 之 函数

    什么是函数 引言 现在有这么个情况:假设我们python中的len方法不可以使用了,而恰好你又要计算一个字符串的长度你该怎么办呢?有人说:‘简单,可以使用for循环嘛 s1 = "hello ...

  9. 开始Dev之路

    从今天开始,开启Dev的发展之路.

  10. php正则提取html图片(img)src地址与任意属性的方法

    <?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/2017020716 ...