gpt4 book ai didi

python - 如何布局队列/ worker 结构以支持多种环境的大型任务?

转载 作者:太空狗 更新时间:2023-10-29 17:50:52 51 4
gpt4 key购买 nike

对于基于 Python/Django/Celery 的部署工具,我们有以下设置:

  1. 我们目前使用默认的 Celery 设置。 (一个队列+交换称为“celery”。)
  2. 队列中的每个任务代表一个部署操作。
  3. 环境的每项任务都以可能需要(非常)长的同步阶段结束。

需要满足以下规范:

  1. 并发性:多个环境的任务应该同时执行。
  2. 锁定:可能至多每个环境同时运行任务(即环境锁定)。
  3. 吞吐量优化:当单个环境有多个任务时,可以将它们的同步阶段合并起来进行优化。因此,如果任务接近尾声,它应该检查队列中是否有新任务等待此环境,如果有,则跳过其同步阶段。

实现它的首选方法是什么?

一些想法:

  • 我会说我们必须设置多个队列:每个环境一个,并让 N 个 celery worker 专门处理一个队列,每个。 (这将解决规范 1+2。)
    但是我们如何让多个 celery worker 专门监听不同的队列呢?
  • 是否有一种清晰的方法来了解队列中有更多任务在等待环境?

最佳答案

对于 1,2 使用多个队列并使用 -Q 启动 worker 来指定要监听的队列。同时配置 CELERYD_PREFETCH_MULTIPLIER = 1,一次只针对一个任务。

要获取队列长度(使用 rabbitmq 测试),您可以使用如下内容:

from kombu.connection import BrokerConnection
connection = BrokerConnection(BROKER_HOST, BROKER_USER...)
channel = connection.channel()
q, j, c = channel.queue_declare('celery', passive=True)
print 'celery %d jobs in queue' % j

'queue_delcare' 作为副作用,给你队列的长度。希望对您有所帮助。

关于python - 如何布局队列/ worker 结构以支持多种环境的大型任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781872/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com