zoukankan      html  css  js  c++  java
  • 深入Celery之使用队列以及优先级提高响应

    多个队列:

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    #!/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),分开独立工作进程跑,进程之间不会互相影响

  • 相关阅读:
    Java中的并发库学习总结
    Android源码的git下载地址
    Android下载Android源码
    工具类 验证手机邮箱
    hibernate缓存说明
    Hibernate之N+1问题
    常用正则
    Java Base64加密、解密原理Java代码
    Base64加密解密原理以及代码实现(VC++)
    情书经典语录
  • 原文地址:https://www.cnblogs.com/ykugb/p/10010031.html
Copyright © 2011-2022 走看看