gpt4 book ai didi

Python:针对不同特定工作人员的分布式任务队列

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:36 26 4
gpt4 key购买 nike

我正在寻找管理任务分配(例如任务队列)的 python 库/框架。然而,任务将需要专门的工作人员:工作人员 A 只能处理类型 a 的任务,工作人员 B 和 C 只能处理类型 b 等。此外,这些工作人员将在不同的计算机上运行并且不能共享相同的代码库(因为,就像在一条生产线上一样,每个任务都必须控制特定的硬件,只有一台计算机可以访问这些硬件)。

我看过像 python RQ 这样的库或 Celery,但如果我理解正确的话,它们需要相同的代码库才能在不同的工作人员上运行,并且用于分配计算。我正在寻找的基本上只是抽象任务队列的管理和工作人员可以通过网络获取任务的机制。一个任务基本上只是一些关于它的进度、错误、结果等的数据和元信息。如果任务也可以相互依赖,那么一个额外的好处就是一个任务可以依赖于另一个任务的结果。

是否有一个简单的库,负责管理队列、网络协议(protocol)等,提供我正在寻找的东西?

最佳答案

这听起来很适合 Ray ,这是一个用于并行和分布式 Python 的库。您可以使用 Ray actors打造“特化 worker ”。下面是一个示例,其中包含由类 WorkerType1WorkerType2 表示的多种类型的工作人员。

import ray


@ray.remote
class WorkerType1(object):
def method1(self):
# Do some interesting work.
return 1


@ray.remote
class WorkerType2(object):
def method2(self):
# Do some interesting work.
return 2


if __name__ == "__main__":
ray.init()

# Create one worker of each type.
worker_1 = WorkerType1.remote()
worker_2 = WorkerType2.remote()

# Kick off 100 tasks for each worker.
result_ids = []
for _ in range(100):
result_ids.append(worker_1.method1.remote())
result_ids.append(worker_2.method2.remote())

# Retrieve the results.
results = ray.get(result_ids) # This is [1, 2, 1, 2, ...].

您当然可以为每种类型的 worker 创建一个池。 worker 也可以有任务变化的状态,可以有多种不同的方法,等等。您可以在 Ray documentation 中阅读更多内容.

请注意,要在集群而不是单机上运行上述示例,您需要修改 ray.init() 行以传入集群地址。

请注意,我是 Ray 开发人员之一。

关于Python:针对不同特定工作人员的分布式任务队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308524/

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