2012-08-07 29 views
2

我需要編寫一個非常特定的數據處理守護進程。對我來說多處理是正確的工具嗎?

這裏是我怎麼想它可能與多工作:

  • 流程#1:一個過程來獲取一些重要的元數據,它們可以被提取每一秒,但這些數據必須在過程中提供#2。進程#1寫入數據,進程#2讀取它們。

  • 過程#2:兩個過程,它們將根據過程#1中接收到的內容獲取真實數據。提取的數據將被存儲到(稍後)處理的(大)隊列中

  • 進程#3:輪詢在進程#2中創建的隊列並處理這些數據的兩個(或多個)進程。一旦完成,新的隊列被填充以用於進程#4中

  • 進程#4:將讀取由進程#3填充的隊列並通過HTTP發回結果的兩個進程。

所有這些不同過程背後的想法是儘可能地使它們專門化,並使它們儘可能地獨立。

全部放入系統過程將被包裝成在這裏實現主守護程序:

我想知道如果我所想象的是相關的/愚蠢/矯枉過正/等,特別是如果我在守護進程的主父進程中運行守護進程multiprocessing.Process(es)。此外,我有點擔心潛在的鎖定問題。理論上講,讀寫數據的過程使用不同的變量/結構,以避免一些問題,但我仍然擔心。

也許對我的上下文使用多處理並不是正確的做法。我很想獲得關於此的反饋。

注:

  • 我不能使用Redis的作爲數據結構服務器
  • 我想過使用ZeroMQ IPC的,但我會避免使用其他額外庫,如果多可以做的工作也是如此。

在此先感謝您的意見。

回答

0

一般來說,你在不同的工作人員和不同的工作任務以及你讓他們溝通的計劃已經看起來不錯。但是,您應該注意的一件事情是處理步驟是I/O還是CPU綁定。如果你是I/O綁定的話,我會盡可能的去尋找線程模塊:應用程序的內存佔用空間會更小,並且線程之間的通信可以更高效,因爲允許共享內存。只有當您需要額外的CPU功率時,才能進行多處理。在你的系統中,你可以使用兩者(看起來像進程3(或更多)會執行一些繁重的計算,而其他工作者將主要是I/O限制)。

相關問題