2017-01-06 40 views
1

给大家的第一个新年快乐和2017年的快乐编码。如何在服务器上并行提交“任务”

我有1M个“任务”使用python运行。每个任务将需要大约2分钟,并将处理一些本地图像。我想尽可能以自动的方式并行运行。我的服务器有40个核心,所以我开始看如何做多,但我看到了以下问题:

  1. 保持每个任务的日志是不容易的(我的工作,但到目前为止,我没有成功即使我在stackoverflow上找到很多示例)
  2. 如何知道应该使用多少个CPU以及应该将多少CPU留给服务器以执行基本的服务器任务?
  3. 当我们在服务器上有多个用户时,我们如何看到已经使用了多少个CPU?

在我以前的CERN物理学家的生活中,我们使用作业提交系统在许多集群上提交任务。当插槽可用时,任务被放入队列并进行处理。我们是否也有用于LINUX服务器的工具?我不知道这样的工具(作业调度员)的正确英文名称是什么?

最好的将是一个工具,我们可以配置使用我们的N CPU作为“车辆”来并行处理任务(并保留所需的CPU,以便服务器也可以运行基本任务),将作业的所有用户在队列中具有优先权并处理它们“车辆”可用。奖金将成为监控任务处理的一种方式。

我希望我用正确的词来描述我想要的。

感谢 法比安斯基

回答

2

你所讲的是一般称为“工人池”。它可以使用线程或进程来实现。实施选择取决于您的工作流程。

一组工人可以让您选择要使用的工人数量。此外,游泳池通常在工作人员面前有一个队列,以便将他们与主要逻辑分离。

如果您想在单个服务器内运行任务,则可以使用multiprocessing.Poolconcurrent.futures.Executor

如果要通过群集分配任务,有几种解决方案。 CeleryLuigi就是很好的例子。

编辑:

这不是你关心的用户。现代操作系统在多个用户之间共享资源方面做得非常好。如果过度使用资源成为问题,SysAdmin应该确保这不会通过为每个用户分配配额而发生。这可以通过很多方式完成。系统管理员应该熟悉的示例工具是ulimit。换句话说:你的软件不应该做什么操作系统:抽象底层机器,为你的软件提供一个“无限”的资源集合。管理服务器的人应该是告诉你的人:“最多使用X个CPU”。

也许,您在CERN使用的是像Mesos这样的系统。这些解决方案将大型集群集中在一组资源中,您可以根据这些资源调度任务。如果所有用户都通过它访问群集,这将起作用。

如果您与其他人共享服务器,或者您一致同意配额,或者您都采用通用调度框架(如Celery)。

+0

谢谢。我正在使用python多处理模块,但是我不清楚我们是否有3个用户在服务器上运行,我怎么知道有多少进程正在运行以及有多少个空闲空闲。对于服务器的单个用户来说,它似乎是一个很好的工具,但是如果所有用户独立使用所有线程,我们将会使服务器崩溃。我误解了某些事件是因为我们在同一台服务器上有多个用户需要同时使用所有资源? –

+0

更新了答案。 – noxdafox

+0

非常感谢这个伟大的总结。我会看看你所建议的所有工具。 –

相关问题