我在寻找一个管理任务分配的python库/框架(例如任务队列)。
但是,任务需要专门的Worker:Worker A只能处理a
类型的任务,Worker B和C只能处理b
等类型的任务。
此外,这些工人将在不同的计算机上运行,不能共享同一个代码库(因为,就像在制造线上一样,每个任务都必须控制特定的硬件,只有一台计算机可以访问这些硬件)。在
我已经看过pythonRQ或Celery之类的库,但是如果我理解正确的话,它们需要相同的代码库来运行在不同的worker上,并且用于分布式计算。我要找的基本上只是一个抽象任务队列的管理和一个工人可以通过网络获取任务的机制。一个任务基本上就是关于它的进度、错误、结果等的一些数据和元信息。 如果任务也可以相互依赖,那么一个任务就可以依赖于另一个任务的结果,这将是一个额外的收获。在
我在找一个简单的网络管理协议?在
这听起来非常适合Ray,它是一个并行和分布式Python库。您可以使用Ray actors创建“专业工人”。下面是一个由类
WorkerType1
和WorkerType2
表示的多个类型的worker的示例。在当然,您可以创建每种类型的工作人员池。工人也可以有任务发生变化的状态,可以有多种不同的方法,等等。您可以在Ray documentation中阅读更多内容。在
请注意,要在集群上而不是在一台机器上运行上面的示例,您需要修改
ray.init()
行以传入集群地址。在请注意,我是Ray开发人员之一。在
我认为,您需要的不是python库,而是一个适当的队列服务,它作为一个单元进行配置和管理,与python worker完全分离。这样,您就不需要编写自己的公共库,这些库将成为所有worker的公共依赖项,但是可以重用现有的包来进行队列订阅。在
我真的推荐此资源,以帮助您实现您想要的目标,并介绍要查找的术语: https://github.com/donnemartin/system-design-primer#message-queues
我链接到“消息队列”部分,其中列出了几个可以浏览的选项:
当然,队列可以用来将任务作为消息分发。在
另外,如果您正在构建一个高度异步的系统,您可以探索Event Sourcing模式,因为它塑造了您的整个体系结构,以使用消息队列或流式服务来传播事件。如果你想走这条路,那么为这份工作选择合适的服务是非常重要的。在
相关问题 更多 >
编程相关推荐