python深入与提高_基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?...

多个队列:

1.Celery默认使用的队列名为celery默认绑定在direct交换机celery,可通过CELERY_DEFAULT_QUEUE/CELERY_DEFAULT_EXCHANGE/CELERY_DEFAULT_ROUTING_KEY等参数配置修改.#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Date    : 2016-12-24 17:32:54

# @Author  : 李满满 (xmdevops@vip.qq.com)

# @Link    : http://xmdevops.blog.51cto.com/

# @Version : $Id$

from __future__ import absolute_import

# 说明: 导入公共模块

from kombu import Queue, Exchange

# 说明: 导入其它模块

# BROKER_URL = 'amqp://root:qwertyuiop@172.24.10.1:5672//'

# CELERY_RESULT_BACKEND = 'redis://172.24.10.1:6379/0'

BROKER_URL = 'amqp://root:qwertyuiop@10.2.5.51:5672//'

CELERY_RESULT_BACKEND = 'redis://10.2.5.51:5123/0'

CELERY_TASK_SERIALIZER = 'msgpack'

CELERY_RESULT_SERIALIZER = 'json'

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24

CELERY_ACCEPT_CONTENT = ['json', 'msgpack']

CELERYD_MAX_TASKS_PER_CHILD = 40

CELERY_QUEUES = (

Queue(

name='email_queue',

exchange=Exchange('email_exchange', 'direct'),

routing_key='email'),

Queue(

name='wixin_queue',

exchange=Exchange('wixin_exchange', 'direct'),

routing_key='wixin'),

)

CELERY_ROUTES = {

'work.notify.email.send_mail': {

'queue': 'email_queue',

'routing_key': 'email'

}

}

扩展: 多个队列主要为了解决由于默认子进程池大小有限制,当其中一个任务消息量特别大时,那么其它重要消息可能会被被滞后处理,导致严重影响用户体验,可以根据业务实际情况将不同的任务放于不同的队列中且指定不同的子进程数来提高整体的响应,如上分别定义了绑定到email_exchange的direct交换机的email_queue和绑定到wixin_exchange的direct交换机的wixin_queue

疑问: Queue应该是binding到交换机上,为何参数中给出的是routing_key很奇怪...?

注意: 启动的时候并不推荐在一个worker进程中启动这两个队列(celery worker -A work.app -l info),强烈建议分开进程跑(celery worker -A work.app -c 2 -Q email_queue -l info;celery worker -A work.app -c 4 -Q wixin_queue -l info),分开独立工作进程跑,进程之间不会互相影响~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值