美文网首页
Celery消息队列的配置简例(模拟优先级)

Celery消息队列的配置简例(模拟优先级)

作者: Mr韩_xianfeng | 来源:发表于2024-01-02 16:23 被阅读0次

本例将使用django+celery+redis演示如何配置celery的任务队列以及如何使用他们
django==3.0.4
celery==4.4.0
redis==3.3.10
大家都知道redis不像rabbitmq支持任务的优先级,但可以使用不同的队列来区分不同的任务类型,比如优先级较高且耗时较短的任务都放到queue1,而耗时较长的可以放到queue2。这样不同类型的任务就不再互相干扰了,这不是个完美的方案,但可以满足大部分场景了。

配置

方法1

CELERY_DEFAULT_QUEUE = "default"
CELERY_QUEUES = {
    "default": {
        "exchange": "default",
        "exchange_type": "direct",
        "routing_key": "default"
    },
    "queue0": {
        "routing_key": "P0",
        "exchange": "P0",
        "exchange_type": "P0",
    }
}

方法2

from kombu import Queue,Exchange
CELERY_QUEUES = ( 
  Queue('default', Exchange('default'), routing_key='default'), 
  Queue('P0', Exchange('P0'), routing_key='P0'),
  ) 

其中路由键支持正则匹配,比如routing_key="WEB.” 则以WEB开头的路有都归到default队列.
其它参数自行查阅吧

调用

@app.task(name='DEMO_P0', queue='P0')
def task_p0():
    print('this is p0')
    return 0

注:也可以在调用时指定队列
r = task1.apply_async(args=(1, 2), queue='queue1', routing_key='queue1')
亦或使用CELERY_ROUTES配置路由

启动

celery -A core worker -E -l info
celery -A core worker -E -l info -Q P0
这里第一行是消费默认的default队列,第二行是单独消费P0队列
注:这里启动时我没有指定-P eventlet,因为测试时发现会提示django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread.
网上有几个解法如版本问题、关闭线程数据库连接等都不太好使,也没再深入研究。如果哪位知晓也烦请告知,感谢。

相关文章

  • 消息队列:celery

    1. 什么是 celery Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统; Celery 专注...

  • celery 远程控制实现之 revoke

    介绍 由于对 celery 在消息队列上实现远程控制的好奇,因而以 revoke 命令(取消任务)为例来研究其中的...

  • RabbitMQ与Celery

    RabbitMq与Celery应用示意图 1、RabbitMQ ((消息队列工具,在celery中扮演broker...

  • python-分布式任务队列

    celery 分布式任务队列工具 Celery是一个分布式任务队列工具,是一个异步的任务队列基于分布式消息传递 基...

  • RabbitMQ 之优先级队列

    设置优先级分为两步:先给队列设置优先级,其次给消息设置优先级。 1.队列设置优先级: 2.消息设置优先级: 上面的...

  • Celery简介

    Celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。 Celery用于生产系统每天处理数以百万计...

  • Celery,Tornado,Supervisor构建和谐的分布

    Celery 分布式的任务队列 与rabbitmq消息队列的区别与联系: rabbitmq 调度的是消息,而Cel...

  • 消息队列celery初探

    消息队列是网站架构中常用的组件,在异步任务、高并发等场景下使用广泛,celery是py下常用的消息队列,最近有一个...

  • python爬虫之celery分布式任务(踩坑)

    一. celery和RabbitMQ简单介绍 Celery是一个基于Python开发的分布式异步消息队列,可以轻松...

  • Celery简单使用

    简介 Celery消息队列 消息队列选择一般选择以下两种 1、redis 这是比较轻量级的 2、rabbitmq ...

网友评论

      本文标题:Celery消息队列的配置简例(模拟优先级)

      本文链接:https://www.haomeiwen.com/subject/nhgpndtx.html