Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜任务、工人和队列组织_Python_Multithreading_Asynchronous_Rabbitmq_Celery - Fatal编程技术网

Python 芹菜任务、工人和队列组织

Python 芹菜任务、工人和队列组织,python,multithreading,asynchronous,rabbitmq,celery,Python,Multithreading,Asynchronous,Rabbitmq,Celery,我有一些独立的任务,我目前正在将这些任务交给不同的/独立的员工 为了便于理解,我将向您介绍一个示例。假设我有三个独立的任务,即睡眠,吃,微笑。任务可能需要在不同的芹菜配置下工作。因此,我认为,最好将这些任务中的每一个任务分成不同的目录,并使用不同的工作人员。某些任务可能需要在不同的服务器上工作 我计划在将来添加更多的任务,每个任务都将由不同的开发人员实现 在提供这些条件的情况下,每个任务都有多个工人关联 现在,问题和我的问题来了 当我启动三个smile任务时,其中一个任务将由smile的工作人员

我有一些独立的任务,我目前正在将这些任务交给不同的/独立的员工

为了便于理解,我将向您介绍一个示例。假设我有三个独立的任务,即
睡眠
微笑
。任务可能需要在不同的芹菜配置下工作。因此,我认为,最好将这些任务中的每一个任务分成不同的目录,并使用不同的工作人员。某些任务可能需要在不同的服务器上工作

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

在提供这些条件的情况下,每个任务都有多个工人关联

现在,问题和我的问题来了

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


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

在类似的设置中,我决定使用不同任务的特定队列,然后我可以决定哪个工作人员监听哪个队列(也可以动态更改!)答案取决于两件应该考虑的事情:

  • 命令的顺序应该保留吗
如果是这样,最好的方法是将某种命令模式作为序列化消息放置,这样每个获取/使用的消息都可以在应用程序中的单个位置按顺序执行。 如果这不是您的问题,您可以在单个exchange中发布不同的消息类型,并让不同的工作人员按预定义的模式接收消息的同时使用主题交换。顺便说一下,这将使您可以轻松添加另一项任务,比如说“饮料”,而无需更改现有交通拓扑/现有工人中的线路

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

如果您有非常密集的任务流量(就频率而言),那么为每种任务类型创建不同的队列可能是值得的,这样当您长大后,您可以将每种任务放在rabbit集群中的不同节点上。

我决定使用多个队列。到目前为止,我还没有遇到任何问题。如果应该保留订单,那么应该使用任务