【问题标题】:Distributing jobs over multiple servers using python使用 python 在多个服务器上分配作业
【发布时间】:2023-12-29 16:15:01
【问题描述】:

我目前有一个可执行文件,它在运行时会使用我服务器上的所有内核。我想添加另一台服务器,并在两台机器之间拆分作业,但每个作业仍然使用它正在运行的机器上的所有内核。如果两台机器都忙,我需要下一个作业排队,直到两台机器中的一台空闲。

我认为这可能是由 python 控制的,但是我是一个新手,不确定哪个 python 包最适合这个问题。

我喜欢用于作业排队的“heapq”包,但它看起来像是为单个服务器使用而设计的。然后我查看了 Ipython.parallel,但它似乎更适合为每个核心(在一个或多个服务器上)创建单独的较小作业。

我在这里 (https://wiki.python.org/moin/ParallelProcessing) 看到了大量不同选项的列表,但我可以通过一些指导来解决此类问题。

任何人都可以提出一个可能有助于解决这个问题的软件包,或者解决这个问题的不同方法吗?

【问题讨论】:

  • 这不是关于 Python 的问题,也不是任何具体的问题。您可能想使用生产者/消费者和公共队列(例如rabbitmq)之类的概念自己创建一些东西,或者甚至可能使用像hadoop 的`map-reduce 这样的框架,该框架旨在扩展大量数据的处理数据。
  • heapq 与作业管理没有任何关系。它是一种特定类型的二叉树的实现。

标签: python ipython distributed


【解决方案1】:

Celery 完全符合您的要求 - 可以轻松地将任务队列分布在多台(许多)机器上。

请参阅the Celery tutorial 以开始使用。

另外,IPython 有自己的基于 ZeroMQ 的内置多处理库;见the introduction。我以前没有用过这个,但它看起来很简单。

【讨论】: