首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何布局队列/工作结构以支持多个环境中的大型任务?

如何布局队列/工作结构以支持多个环境中的大型任务?
EN

Stack Overflow用户
提问于 2010-05-06 14:33:27
回答 2查看 1.1K关注 0票数 12

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

  1. 我们目前使用默认的芹菜设置。(一种叫“芹菜”的queue+exchange。)
  2. 队列中的每个任务代表一个部署操作。
  3. 环境的每个任务都以一个同步阶段结束,这个阶段可能需要很长时间。

需要履行下列规定:

  1. 针对多个环境的Concurrency:任务应该同时执行。
  2. 锁定:可能最多有一个任务同时运行于每个环境(即环境锁定)。
  3. 吞吐量优化:当单个环境有多个任务时,可以将它们的同步阶段组合起来进行优化。因此,如果一个任务接近它的结束,它应该检查是否有新的任务在队列中等待这个环境,如果是,跳过它的同步阶段。

实现这一点的首选方法是什么?

一些想法:

  • 我想说的是,我们必须建立多个队列:每个环境一个队列,并让N个芹菜工人专门处理一个队列,每个队列。(这将解决规范1+2。) 但我们如何让多名芹菜工人专门听不同的队列呢?
  • 是否有一种干净的方式可以知道队列中有更多的任务在等待一个环境?
EN

回答 2

Stack Overflow用户

发布于 2011-04-07 10:13:29

对于1,2,使用多个队列并使用-Q启动工作人员来指定要侦听的队列。还配置CELERYD_PREFETCH_MULTIPLIER = 1,一次只用于一个任务。

要获得队列长度(使用rabbitmq进行测试),可以使用以下内容:

代码语言:javascript
复制
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”作为一个副作用,给您队列的长度。希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2011-04-05 18:43:33

我想看看零q,它可以在一个超级快的库中进行消息传递和多线程处理。它还支持大量的语言,并内置了负载平衡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2781872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档