基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础入门_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 : 李满满 ([email protected]) # @Link : http://xmdevops.blog.51cto.com/ # @Version : $Id$ from __future__ import absolute_import # 说明: 导入公共模块 from kombu import Queue, Exchange # 说明: 导入其它模块 # BROKER_URL = ‘amqp://root:[email protected]:5672//‘ # CELERY_RESULT_BACKEND = ‘redis://172.24.10.1:6379/0‘ BROKER_URL = ‘amqp://root:[email protected]: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),分开独立工作进程跑,进程之间不会互相影响~
本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1886364
以上是关于基础入门_Python-模块和包.深入Celery之使用队列以及优先级提高响应?的主要内容,如果未能解决你的问题,请参考以下文章
基础入门_Python-模块和包.深入Celery之常用架构/方案选型/必知必会?
基础入门_Python-模块和包.深入Celery之Beat触发定时/周期性任务?
基础入门_Python-模块和包.深入Celery之节点管理/任务调度/任务追踪?
基础入门_Python-模块和包.深入SQLAlchemy之玩转各种增删查改操作?