python - 是否可以在 Celery 中为每个队列分别设置 "worker_prefetch_multiplier"?

标签 python python-3.x celery

我想知道是否可以为队列设置不同的预取乘数。

我有 2 个队列,一个运行的任务非常短,另一个稍长。较短任务的队列需要优先于其他队列。

为了确保优先级工作可靠,这必须在 celery config 中设置:

task_acks_late = True
worker_prefetch_multiplier = 1

但是,这确实会损害快速任务队列的性能。是否可以进行配置,如果 worker 从快速任务队列中获取,worker_prefetch_multiplier 为 4,如果 worker 从慢速任务队列中获取,worker_prefetch_multiplier 为 1?

最佳答案

我不确定是否可以为每个队列定义不同的预取限制,因为 the Celery documentation seems to set these limits per worker .

但是,我们正在通过为每个队列启动不同的工作程序来解决这个问题。您可以为每个工作人员定义不同的预取限制 - 如果一个工作人员仅使用一个队列,您还可以定义不同的预取限制以及每个队列的工作人员并发数。这还有一个额外的好处,即您的长时间运行的任务不会阻塞工作人员处理短期运行任务的时间。 如果您碰巧考虑使用 celery-batches为了进一步加快短期运行任务的处理速度,将队列分成不同的工作人员变得更加重要,因为您希望为该工作人员定义相当高的预取限制(注意:如果您的预取限制为 0,您的队列非常满)。

在我们的例子中,我们在一个容器化的环境中运行我们的 worker 。这使我们甚至可以为每个工作线程/队列定义独立的资源分配(内存/CPU)。

关于python - 是否可以在 Celery 中为每个队列分别设置 "worker_prefetch_multiplier"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66526540/

相关文章:

Python - 隐式 boolean 比较

python - 我可以在不知道 paramiko 类型的情况下读取 SSH 私钥吗?

python - 如何获取 tkinter 小部件的宽度?

python - 年到世纪功能

linux - 在构建 docker image level=error msg ="Can' t close tar writer : io: read/write on closed pipe"

Python:知道函数是从单元测试调用的吗?

python - Pandas :基于两列将一个数据框中的值替换为另一个数据框中的值

csv - 在Python中合并三个具有相同标题的csv文件

python - django celery 终止任务的子进程

python - Celery池进程、任务以及系统进程和内存空间