Python Celery多队列配置代码实例


Posted in Python onNovember 22, 2019

这篇文章主要介绍了Python Celery多队列配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Celery官方文档

项目结构

/proj
-__init__
-app.py            #实例化celery对象
-celeryconfig.py        #celery的配置文件
-tasks.py           #celery编写任务文件

app.py

#coding:utf-8
from __future__ import absolute_import
from celery import Celery

app = Celery('proj', include=['proj.tasks'])   #实例化celery对象

app.config_from_object('proj.celeryconfig')   #引入配置文件

if __name__ == '__main__':            
  app.start()
  • proj参数为celery的名字
  • include参数为启动时导入的模块列表

tasks.py

#coding:utf-8
from __future__ import absolute_import

from proj.app import app
@app.task()
def add(x, y):
  return x + y

celeryconfig.py

#coding:utf-8
from kombu import Queue

BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//' # 使用RabbitMQ作为消息代理


CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' # 把任务结果存在了Redis

CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案

CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显

CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型

CELERY_QUEUES = (  #设置add队列,绑定routing_key
  Queue('add', routing_key='xue.add'),
)


CELERY_ROUTES = {  #projq.tasks.add这个任务进去add队列并routeing_key为xue.add 
  'projq.tasks.add': { 
    'queue': 'add',
    'routing_key': 'xue.add',
  }
}
  • CELERY_ACCEPT_CONTENT的类型msgpack为是一种比json更小更快的类型,如果用需要安装相对应的包。
  • CELERY_QUEUES设置一个指定routing_key的队列,这个名字可以任意指定。
  • CELERY_ROUTES设置路由,对指定的任务名,指定对应的队列和routing_key,注意,这里的routing_key需要和上面参数的一致。

启动

在proj的上层目录输入

celery -A proj.app worker -Q add -l info

proj.tasks.add为任务名称,也就是在CELERY_ROUTES设置的那个名称

add是设置的queue,key=xue.add是设置的routing_key

发布任务

from proj.tasks import add
add.delay(2,3)

多队列中需要修改的地方

CELERY_QUEUES = (  #设置add队列,绑定routing_key
  Queue('add', routing_key='xue.add'),
)


CELERY_ROUTES = {  #projq.tasks.add这个任务进去add队列并routeing_key为xue.add 
  'projq.tasks.add': { 
    'queue': 'add',
    'routing_key': 'xue.add',
  }

配置两个队列

# 配置队列
CELERY_QUEUES = (
  Queue('default', routing_key='default'),
  Queue('队列1', routing_key='key1'),
  Queue('队列2', routing_key='key2'),
)
# 路由(哪个任务放入哪个队列)
CELERY_ROUTES = {
  '任务1': {'queue': '队列1', 'routing_key': 'key1'},
  '任务2': {'queue': '对列2', 'routing_key': 'key2'},
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析xml文件实例分享
Dec 04 Python
python实现在sqlite动态创建表的方法
May 08 Python
在centos7中分布式部署pyspider
May 03 Python
理论讲解python多进程并发编程
Feb 09 Python
对Python _取log的几种方式小结
Jul 25 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python爬虫基础知识点整理
Jun 02 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
python温度转换华氏温度实现代码
Dec 06 Python
用python实现一个简单的验证码
Dec 09 Python
python使用glob检索文件的操作
May 20 Python
python 协程 gevent原理与用法分析
Nov 22 #Python
python 并发下载器实现方法示例
Nov 22 #Python
使用python绘制二维图形示例
Nov 22 #Python
python将邻接矩阵输出成图的实现
Nov 21 #Python
python实现小世界网络生成
Nov 21 #Python
使用Python的networkx绘制精美网络图教程
Nov 21 #Python
利用Python绘制Jazz网络图的例子
Nov 21 #Python
You might like
thinkPHP中session()方法用法详解
2016/12/08 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
2014年审计人员工作总结
2014/12/19 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
Python实现仓库管理系统
2022/05/30 Python