django-celery 创建多个broker队列 异步执行任务时指定队列
一.这里不再详细述说 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队列 异步执行任务时指定队列的更多相关文章
- Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)
系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe ...
- Python开发程序:RPC异步执行命令(RabbitMQ双向通信)
RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...
- Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)
RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...
- Django --- celery异步任务与RabbitMQ模块
一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- django celery的分布式异步之路(一) 起步
如果你看完本文还有兴趣的话,可以看看进阶篇:http://www.cnblogs.com/kangoroo/p/7300433.html 设想你遇到如下场景: 1)高并发 2)请求的执行相当消耗机器资 ...
- Django+Celery 执行异步任务和定时任务
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- 使用django + celery + redis 异步发送邮件
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
随机推荐
- python大法好——递归、内置函数、函数进阶
1.递归(自己干自己) def fun(n): n=n/2 print(n) if(n>2) fun(n) #函数调用 fun(10) 结果是5 2 1 0 递归的执行过程:递归执行到最里面一层 ...
- tensorflow实战讨论
欢迎关注微信公众号:樱园的玻尔兹曼机
- href,src,url三者区别。
在html中: href(Hypertext Reference)指向网络上的资源,在现有元素(如a标签)或现有文档(如link)与目标锚或资源之间建立链接. 建立链接的过程中,浏览器不会停止解析所在 ...
- VS2015秘钥
Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...
- Windows Server 2012安装密钥
Windows Server 2012 Standard 密钥:NB4WH-BBBYV-3MPPC-9RCMV-46XCB Windows Server 2012 StandardCore 密钥:NB ...
- Easyui datagrid 绑定本地Json数据
var jsonstr = '{"total":1,"rows":[{"id":"M000005","name ...
- Linux命令列内容
命令列内容: 一般模式 移动光标 [ctrl]+[f] 屏幕[向前]移动一页 [ctrl]+[b] 屏幕[向后]移动一页 0 这是数字0:移动到这一行的最前面字符处 $ 移动到这一行的最后面字符处 G ...
- Node.js 中使用 ES6 中的 import / export 的方法大全
https://blog.csdn.net/universsky2015/article/details/83754741
- surf the internet scientifically
You can get some useful information from the link below: 1. http://blog.sina.com.cn/s/blog_4891cbc50 ...
- ORM常用操作
一般操作 专业官网文档 必会13条查询 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> get ...