2013-08-01 176 views
1

我對Python多處理模塊相當熟悉,但我不確定如何實現這個設置。我的項目有這個基本流程:Python多處理管理

要求串行設備 - >收集迴應 - >解析響應 - >斷言響應 - >重複

它是正確的,現在遍歷,直到順序操作已收集所需宣稱的答覆的數量。我希望通過讓'主進程'執行前兩個操作,然後將解析和斷言任務傳遞給工作進程隊列,從而加速完成此任務。但是,這隻有在主進程始終運行時纔有用。我保證要在多核機器上工作。

有什麼辦法讓多處理模塊中的進程總是有焦點/使運行,所以我可以做到這一點?

+0

我不知道你在問什麼。你可以開始永久運行並相互通信的進程。你能解釋這個問題在哪裏嗎? – freakish

+0

如果我知道如何處理正常工作,當您創建多個進程的焦點(從處理器perspectice)是任意的。 IE瀏覽器如果我收到4個響應並將解析傳遞給工作人員,則可能有一段時間,我的4內核處理器只處理解析作業,而不是串行通信過程。我希望有一種方法可以確保串行通信過程始終處於處理器焦點之內。 –

+1

您不能強制處理器專注於給定的進程(至少不在合理的操作系統下)。但是你誤解了一些事情:並不是說處理器將重點放在這4個過程上,直到他們完成工作。上下文切換髮生在工作中間(這就是爲什麼你可以打開例如10個電影播放器​​,並且它們全部同時工作)。所以你不應該擔心,你的服務器不會被阻塞。 – freakish

回答

1

從我能收集到的信息(假設您沒有嚴格要求主人是總是記錄來自串行設備的數據),您只需讓主人準備好給任何員工一大塊數據並準備好在工作準備就緒後立即從任何工作人員接收數據。

以達致這使用兩種queus和多

Multiprocessing Queue in Python

How to use multiprocessing queue in Python?

這應該是足夠來回您的需求,如果時間(分析數據)>>收集數據

1

這裏有一種方法實施您的工作流程:

  1. 有兩個multiprocessing.Queue對象:tasks_queueresults_queuetasks_queue將保存設備輸出,並且results_queue將保存斷言的結果。

  2. 有工人池,每一個勞動者,是直接從 tasks_queue設備輸出,分析它,斷言,並在results_queue提出主張的結果。

  3. 有另一個過程連續輪詢設備並把設備 輸出在tasks_queue

  4. 還有最後一個過程中不斷輪詢results_queue,並 結束達到resuts所需數量的(成功 斷言),當總體方案。

的過程(multiprocessing.Process對象)總數爲2 + ķ,其中ķ是工人在池的數量。