簡體   English   中英

Python的多處理的過程通信

[英]Process communication of Python's Multiprocessing

我已經了解了Python多進程的Pipes / Queues / Shared ctypes Objects / Managers,並且想將它們與Linux的匿名管道,命名管道,共享內存,套接字等進行比較。 我現在有以下問題

  • Python的多處理的管道和隊列模塊基於匿名管道。 它提供命名管道嗎?

  • Python multiprocessing.sharedctypes是否支持獨立的進程通信? 我認為它僅支持父子進程或兄弟進程通信。

  • 其中哪些僅用於親子關系或兄弟情誼中,可以在獨立過程或不同主機之間進行通信?

  • 它們各自的特點是什么,我應該如何選擇它們?

提前致謝。

您的問題涉及面很廣,大多數答案都可以在multiprocessing模塊文檔中找到。

以下是一個簡短的答案。

  1. 多處理偵聽器和客戶端允許選擇命名管道作為傳輸介質。
  2. 文檔中

    multiprocessing.sharedctypes模塊提供了用於從共享內存中分配ctypes對象的功能,這些對象可以由子進程繼承。

    您不能跨沒有父子關系的進程使用multiprocessing.sharedctypes功能。

  3. 管理 偵聽器和客戶端跨不同主機上的進程或不具有父/子關系的進程進行工作。 AF_INET套接字系列可在不同主機上使用。 盡管如此,我還是建議不要這樣做。 而是使用網絡套接字或其他某種抽象機制。
  4. 文檔中很好地說明了差異和特征。

Python multiprocessing模塊最初是通過threading API實現的。 到那時,它支持的功能有所增長,但核心思想保持不變。 multiprocessing模塊旨在處理Python流程系列。 對於其他任何用途, subprocess模塊都是更好的選擇。

為了在多個主機之間分配任務和作業,有更好的解決方案抽象了低層基礎結構。 您可以查看諸如CeleryLuigi之類的Python項目,或諸如Apache Mesos之類的更復雜的基礎結構。

暫無
暫無

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

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