【问题标题】:Celery tasks sending to different queues is not working发送到不同队列的芹菜任务不起作用
【发布时间】:2020-04-20 13:32:39
【问题描述】:

我的用例是为不同的任务添加使用多个队列,以便将所有 upload_photos 任务发送到一个队列,并将 upload_phone_number 发送到另一个队列,因为上传任务是一项繁重的任务,我不希望上传电话号码受到影响通过上传照片, 即使我使用不同的队列,upload_phone_number 任务也在等待上传照片的执行。这是写多个队列的正确方法吗

CELERY_QUEUES = (
    Queue('fast', Exchange('fast'), routing_key='fast'),
    Queue('default', Exchange('default'), routing_key='default')
)
CELERY_ROUTES = {
    'upload_phone_number': {
        'exchange': 'fast'`
        'exchange_type': 'direct',
        'routing_key': 'fast'
    },
    'upload_photos': {
        'exchange': 'default',
        'exchange_type': 'direct',
        'routing_key': 'default'
    },
}




这是我的芹菜任务

@app.task(name="upload_phone_number")
def upload_photos():

@app.task(name="upload_phone_number")
def upload_phone():

【问题讨论】:

    标签: django redis celery


    【解决方案1】:

    Celery 4.0 版通过(RabbitMQ 或 Redis 传输)支持priorities

    from kombu import Exchange, Queue
    
    app.conf.task_queues = [
        Queue('tasks', Exchange('tasks'), routing_key='tasks',
              queue_arguments={'x-max-priority': 10}),
        Queue('different_tasks', Exchange('different_tasks'), routing_key='different_tasks',
              queue_arguments={'x-max-priority': 5}),
    ]
    

    关于您的解决方案:

    你的例子不起作用的原因是你应该产生至少 2 个工人,其中一个只有快速的 Que

    celery worker -A myproject -Q fast
    celery worker -A myproject -Q fast,slow
    

    【讨论】:

      猜你喜欢
      • 2016-01-28
      • 2016-04-24
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      相关资源
      最近更新 更多