芹菜任务,工人和队列组织

时间:2014-04-09 09:43:27

标签: python multithreading asynchronous rabbitmq celery

我有一些独立的任务,我目前正在为不同的/独立的工人提供这些任务。

为了便于理解,我将向您介绍一个例子。我们说我有三个独立的任务,即sleepeatsmile。任务可能需要在不同的芹菜配置下工作。所以,我认为,最好将这些任务中的每一个分成不同的工作目录。某些任务可能需要在不同的服务器上运行。

我计划在未来添加更多任务,每个任务都将由不同的开发人员实现。

提供这些条件,每个单独任务都有多个工作人员。

现在,这是问题和我的问题。

当我开始执行三个smile任务时,其中一个任务将由smile的工作人员提取并执行。但是下一个任务将从eat的工作人员那里获取,永远不会被执行。

那么,接受的,最常见的模式是什么?我应该将每个任务发送到不同的队列中吗?工作人员应该监听自己的队列吗?

2 个答案:

答案 0 :(得分:1)

答案取决于应该考虑的几件事情:

  • 是否应该保留命令的顺序?

如果是这样,最好的方法是将某种命令模式作为序列化消息放置,这样每个获取/消费的消息都可以在应用程序中的单个位置按顺序执行。 如果这对您来说不是问题 - 您可以在单次交换中发布不同的消息类型时使用主题交换,并让不同的工作人员通过预定义的模式接收消息。顺便说一句,这将让你轻松添加另一个任务,让我们说“喝”而不改变已有的交通拓扑/现有工人的线路。

  • 您是否计划在不同机器之间扩展队列以提高吞吐量?

如果您的任务流量非常大(就频率而言),可能需要为每种任务类型创建不同的队列,因此,当您成长时,您可以将每个任务放在兔群中的不同节点上。

答案 1 :(得分:0)

在类似的设置中,我决定使用特定队列来执行不同的任务,然后我可以决定哪个工作人员监听哪个队列(也可以动态更改!)。