簡體   English   中英

多核 Python:多處理 Vs。 零MQ?

[英]Multi-Core Python: multiprocessing Vs. zeroMQ?

我想編寫python代碼,將數據集加載為輸入並對其進行分析。

將有 5 個並行進程以獨特的方式分析數據——每個進程將以不同的方式處理數據。

在任何處理開始之前, master腳本(將“啟動”所有不同子流程的腳本)將定義一個空列表。

我希望所有不同的進程都將它們的 output 寫入上述相同的列表(這意味着,每個進程都將能夠直接操作master腳本中定義的列表)。

這意味着,如果process1更改了該列表的第一個值,則所有其他進程(在運行時)將看到該列表的第一個值已更改。


我感覺可以使用 2 個不同的python模塊來解決這個問題: multiprocessingzeroMQ

在這種情況下,是否有任何理由更喜歡一個與另一個? 如果——而不是在同一台服務器上運行master腳本——我將在不同(多個)服務器之間拆分進程,你的答案會改變嗎?

(如果這很重要,我使用的是Linux

你不能比較蘋果和橘子。

multiprocessing 是一個 fork 多個進程的庫。

zmq 是一個允許進程使用消息進行通信的庫。

他們做不同的工作。

如果這是您僅有的兩個選擇,並且您確定要在多台機器上分配負載,那么 ZeroMQ 是這兩個選擇中唯一符合要求的選擇。

Python 多處理模塊用於在單個機器上的進程/內核之間分配負載。 據我所知,多處理模塊底層沒有網絡協議,這在隨附文檔的第一段中有所說明。

ZeroMQ 可以通過其 IPC 協議在單台機器上用於類似的進程間消息傳遞,但它也具有基於網絡的協議,允許您在不同機器上運行的進程之間發送消息。

也就是說,這個問題帶有 XY 問題的輕微色彩,因為您似乎任意將選擇范圍縮小到使用 Python 實現分布式程序的眾多可能性中的兩個。

編輯我在這里的答案不正確,我無法刪除已接受的答案,因此將其轉換為 wiki,以防有人想要更正它。 簡短的故事是我匆忙誤讀了文檔。 Python 多處理確實支持跨網絡邊界的進程間通信。 與 ZeroMQ 的一個主要區別是 ZeroMQ 設計為與平台無關,因此您可以在不同平台上混合客戶端/服務器代理,而 Python 多處理是一個包含電池的選項,如果客戶端/服務器進程耦合到 Python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM