2013-06-06 26 views

回答

0

如果要實現消息傳遞,請使用管道和隊列。 如果要實現共享memeory,請使用值和數組。 如果要將面向對象的接口公開到多個進程,請使用管理器。

Pipe是良好的1對1通信或用於字節級協議:

  • 管可以是雙向的(「雙鏈體」)或單向
  • 管是不是併發安全的:只有一個過程可以使用管道的同一端;它是在1對1的通信好,否則它需要鎖
  • 管道可以傳送可揀選Python對象或的原始字節
  • 緩衝區大小不能指定

Queue類似於單向管,但可以以許多對許多場景工作:

  • 隊列是單向的:先入先出
  • 隊列是併發安全的:多個進程可以使用Queu的同一端Ë;所以這是件好事,當有多個生產者或多個消費者
  • 隊列可以僅發送揀選Python對象
  • 隊列的最大尺寸可以指定
  • 「每當你使用一個隊列,你需要確保所有放入隊列中的項目在加入之前最終會被刪除。「

隊列使用管道和一些鎖/信號量來實現。

ValueArray

  • 提供同步訪問共享數據僅
  • 工作與C數據類型(​​)

管理者:

  • 可以使用上各種數據類型:它們返回代理對象CH公開相同的方法作爲底層(共享)對象
  • 可以處理的遠程訪問

ValueArray是輕量級的方法來共享內存。根據我的經驗,使用SyncManagerAutoProxycan be huge的開銷。如果您可以使用ValueArray解決您的問題,請使用它們。SyncManager可能對於向多個進程公開面向對象的接口非常有用,除非它不太頻繁地調用。

相關問題