Celery 和 RabbitMQ - 队列优先级、消费者优先级、任务优先级

2024-02-02

在我的 python 应用程序中,我使用 Celery 作为任务生产者和消费者,使用 RabbitMQ 作为代理。现在,我正在实施优先级。起初,它看起来根本不起作用,因为根据文档,我刚刚添加了x-max-priority队列的参数。我更深入地查找,发现了另一个优先级——消费者优先级和任务优先级。所以,现在看起来有三个不同的优先级,我完全困惑了。您能解释一下其中的区别吗?

队列最大优先级:即https://www.rabbitmq.com/priority.html https://www.rabbitmq.com/priority.html

Queue('my_queue', exchange=Exchange('my_queue'), routing_key='my_queue', queue_arguments={'maxPriority': 10})

消费者优先级:即https://www.rabbitmq.com/consumer-priority.html https://www.rabbitmq.com/consumer-priority.html

Queue('my_queue', exchange=Exchange('my_queue'), routing_key='my_queue', consumer_arguments={'priority': 10})

任务优先级:即https://github.com/celery/celery/issues/2635#issuecomment-173597053 https://github.com/celery/celery/issues/2635#issuecomment-173597053

my_task.apply_async(args=(arg1, arg2), priority=6)

谢谢。

经过更多研究后编辑:

经过更多阅读后我了解到:

队列最大优先级是一种限制,表明该队列仅侦听优先级设置为 max 直至此参数的任务。但是更高优先级的任务呢?队列是否将优先级降低到其自身定义的最大优先级?不理睬他们?

消费者优先看起来像是消费者优先。如果有两个优先级不同的消费者,并且两个消费者都空闲,则第一个消费消息的消费者是优先级较高的消费者。但为什么它是用队列定义的,而不是用消费者本身定义的呢?

任务优先级应该是优先顺序,这对我的需求来说是最重要的。它告诉您应该优先阅读此消息。

因此,看起来最好的优先级将通过多个工作线程和并发设置为 1 的所有优先级的组合来实现,而不是一个具有更高并发性和并发度设置为 1 的工作线程。worker_prefetch_multiplier and task_acks_late配置。

你怎么认为?是对的吗?


  • x-最大优先级是用于定义优先级队列的 RabbitMQ 参数。提供的值是队列支持的最高优先级。
  • 消费者优先如果有多个消费者可以工作,则对特定消费者有利。
  • 任务优先级是你告诉 celery 任务优先级的方式。您的代理(和队列)需要支持优先级才能执行任何操作。

如果您向 celery 提供优先级高于队列的任务x-max-priority,celery 会将消息放入具有 x-max-priority 值的队列中。


我不确定你所说的“最佳优先级”是什么意思。当你启动一个 celery Worker 时,它会启动一个 RabbitMQ 消费者和 N 个其他进程(由并发参数控制)来处理任务。主工作进程将使用任务的消息并将任务放入其池中以供池工作人员之一处理。

正如您所说,您可以通过为实际执行任务的每个进程设置一个队列消费者,以不同的方式从队列中消费。这是否具有更大的任务吞吐量取决于您的环境以及通过队列的任务数量;但是,我不认为它会影响任务的优先级。

如果您有优先级队列(特别是如果您的任务长时间运行),那么选择较低的预取值是明智的,因为在将高优先级任务放入队列之前已经从队列中消耗(提取)的任何任务将首先运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Celery 和 RabbitMQ - 队列优先级、消费者优先级、任务优先级 的相关文章

随机推荐

  • 禁用 Django 中特定应用程序的本地化

    有没有办法在 Django 设置中禁用特定应用程序的本地化 造成这种情况的可能原因有两个 关闭管理应用程序 例如 contrib admin 中的本地化 因为管理员更喜欢使用英语而不是本地语言 一些应用程序的默认翻译确实很糟糕且令人困惑 我
  • React 16:使用钩子和功能组件时从父级调用子级函数

    我需要在父组件中调用子组件的函数 我该怎么做呢 之前在 React 15 中 我可以使用 refs 来调用子函数 但不知道如何使用钩子和功能组件来做到这一点 function Child props function validate to
  • 如何将验证器与 QTableWidgetItem 一起使用?

    假设我有一个 QTableWidgetItem 项目 我只想验证用户输入的数据 例如 用户仅在该项目中输入数字 否则程序将显示警告对话框 我也搜索该文档页面 http harmattan dev nokia com docs library
  • 改进 AngularJS 指令代码

    我写了一个 AngularJS 指令 但我对它还很陌生 我不知道我是否以 Angular 方式 完成 这是我的代码 http plnkr co edit X1tOk4z8f6dCK3mfB7HP p preview http plnkr c
  • 没有事务的 JTA 数据源

    假设手动登记和取消资源 我有许多启用 XA 的资源 数据源 我计划对其执行事务更新 此外 一些支持 XA 的数据源可以单独更新 不需要任何其他资源 假设我已经使用登记的数据源提交了多个事务 那么我可以忽略 TransactionManage
  • JMS 客户端工具 - Java 8 的 HermesJMS 的替代品吗?

    HermesJMS 有哪些替代方案 我需要针对 JBoss WildFly 8 进行测试 它使用 Java 8 HermesJms 似乎是为 Java 6 构建的 但我找不到完整的 Java 8 端口 我尝试设置 hermes bat这个配
  • iPhone iOS 如何将 UILongPressGestureRecognizer 和 UITapGestureRecognizer 添加到同一个控件并防止冲突?

    我正在构建一个 iPhone 应用程序 它可以让用户重新排列屏幕上的一些 UI 元素 如何将点击手势识别器和长按手势识别器添加到同一个 UIView 中 当我长按抬起手指时 点击手势识别器就会启动 如何暂时禁用点击手势识别器或防止其在用户长
  • 在 ASP.NET 中使用 Web API 相对于 Web 方法有什么优势

    我熟悉网络方法 现在我收到了使用 Web API 而不是 Web 方法的建议 我做了一个 ASP NET Web API 的演示 它更接近于MVC架构我正在使用经典的 ASP NET Web 开发 我不喜欢搞乱控制器 MVC概念 采用经典开
  • 警告:mysqli_connect():(HY000/2002):尝试以访问权限禁止的方式访问套接字

    这两天我一直在尝试解决这个问题 警告 mysqli connect HY000 2002 尝试以访问权限禁止的方式访问套接字 我的托管是Azure 他的界面非常糟糕 编程语言是PHP 我的数据库与域位于同一资源组中 帐户数据是正确的 我做错
  • 网络中的边长x

    我正在尝试通过以下代码调整两个节点之间的边的长度 但显然这不起作用 谁能指导我在哪里犯了错误 请注意 我已经看过这个帖子了 如何在 Networkx 中指定边长度来计算最短距离 https stackoverflow com questio
  • 如何在 Android Jelly Bean Launcher 中添加自定义视图

    我正在努力在 android 中制作自定义启动器 我参考了android的Jellybean启动器的代码 现在我想对这个启动器进行一些修改 我想要的是 据我们所知 默认有五个工作区屏幕 我想在任何一个工作区屏幕中添加自定义视图 我的 xml
  • 从数据库中提取行(包括相关行)

    我想为 Oracle 数据库中的一行生成插入字符串 包括其他表中的所有依赖行 及其依赖行 Example CREATE TABLE a a id number PRIMARY KEY name varchar2 100 CREATE TAB
  • PDO + MySQL 和损坏的 UTF-8 编码 [重复]

    这个问题在这里已经有答案了 我在 PHP 中将 PDO 库与 MySQL 数据库一起使用 但是如果我插入任何以 UTF 8 编码的数据 例如阿拉伯单词 它就会插入到数据库中 但作为 在我自己的框架中 创建 PDO 连接后 我发送两个查询 S
  • Solr:结合 EdgeNGramFilterFactory 和 NGramFilterFactory

    我有一种情况需要同时使用 EdgeNGramFilterFactory 和 NGramFilterFactory 我正在使用 NGramFilterFactory 执行 包含 样式搜索 最小字符数为 2 我还想搜索第一个字母 例如带有前面
  • 如何通过蓝牙查询远程手机是否支持PBAP?

    假设两部Android手机通过蓝牙配对并建立连接 如何在客户端以编程方式确定远程设备 服务器 是否支持蓝牙配置文件 例如 PBAP 如果它确实支持 那么如何以编程方式启动与远程设备的 PBAP 会话 我在网上进行了广泛的搜索 但到目前为止还
  • Apache Flink:设置并行度的指南?

    我正在尝试获取一些简单的规则或指南来设置哪些值 操作员或工作 并行性 在我看来 它应该是一个数字 例如 假设我有 2 台任务管理器机器 每台都有 4 个任务槽 假设集群上没有运行其他作业 我会设置并行度吗 用于操作 喜欢过滤并映射到 8 如
  • 如何将 Jest 模拟函数的范围限制为单个测试

    我正在使用 Jest 测试库 React 编写功能测试 经过几天的绞尽脑汁 我发现当你使用 mockResolvedValue or mockResolvedValueOnce 嘲笑的范围不仅限于该测试 import React from
  • C++ 多态性和指针向量问题

    考虑以下示例代码 class Foo class Bar public Foo class FooCollection protected vector
  • 如何阻止android editText中的特殊字符?没有 Android:数字

    如何阻止android editText中的特殊字符 通过不使用机器人 数字 有没有其他方法 甚至以编程方式 EditText 有一个 onTextChanged 监听器 你可以跟踪用户输入的字符 如果该字符非法 你只需将其删除 这不是最优
  • Celery 和 RabbitMQ - 队列优先级、消费者优先级、任务优先级

    在我的 python 应用程序中 我使用 Celery 作为任务生产者和消费者 使用 RabbitMQ 作为代理 现在 我正在实施优先级 起初 它看起来根本不起作用 因为根据文档 我刚刚添加了x max priority队列的参数 我更深入