是否可以在 Celery 中为每个队列单独设置“worker_prefetch_multiplier”?

MrF*_*fer 5 python celery python-3.x

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

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

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

task_acks_late = True
worker_prefetch_multiplier = 1
Run Code Online (Sandbox Code Playgroud)

然而,这确实损害了快速任务队列的性能。是否可以配置为,如果工作人员从快速任务队列中获取,worker_prefetch_multiplier则为 4 ,如果工作人员从慢速任务队列中获取,worker_prefetch_multiplier则为 1 ?

ing*_*yer 2

我不确定是否可以为每个队列定义不同的预取限制,因为Celery 文档似乎为每个工作人员设置了这些限制

但是,我们通过为每个队列启动不同的工作线程来解决这个问题。您可以为每个工作人员定义不同的预取限制 - 如果一名工作人员仅使用一个队列,您还可以定义不同的预取限制以及每个队列的工作人员并发数。这还有一个额外的好处,即长时间运行的任务不会阻塞短期运行任务的工作处理时间。如果您有任何机会正在考虑使用芹菜批次来进一步加快短期运行任务的处理速度,那么将队列分离到不同的工作人员就变得更加重要,因为您希望为该工作人员定义相当高的预取限制(注意:如果您的预取限制为 0 并且队列非常满,您最终将耗尽内存)。

就我们而言,我们在容器化环境中运行我们的工作人员。这使我们甚至可以为每个工作程序/队列定义独立的资源分配(内存/CPU)。