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

  • 相关阅读:
    Angular 学习笔记 (消毒 sanitizer)
    资源链接
    QM作品
    读书笔记
    javascript jQuery遇到的小问题 不定添加
    css 平时遇见CSS的一些小技巧 不定添加
    html 小却重要的问题 不定添加
    Array 对象
    test
    Javascript定义类(class)的三种方法
  • 原文地址:https://www.cnblogs.com/ykugb/p/10010031.html
Copyright © 2020-2023  润新知