2017-01-06 37 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

非常感謝這個偉大的總結。我會看看你所建議的所有工具。 –

相關問題