2011-03-04 76 views
28

Django和Flask使用信號 - 後者使用Blinker庫。在Python,Blinker和Python pubsub庫中,信號和pubsub如何比較?我什麼時候可以使用其中一種?Python - 信號與pubsub有什麼不同?

+0

我很喜歡尋找來自某人在這條路上的決定性答案,例如「他們是同一件事」或「PubSub通常涉及X而信號通常意味着Y.」 – 2011-11-10 22:16:09

回答

14

Blinker docs and PubSub docs

至於BlinkerPubSub去,他們是同樣的事情。區別在於他們如何去做:

Blinker當您訂閱一個信號,你給出的信號的名稱,當你激活信號,你傳遞激活對象。

使用PubSub當您訂閱偵聽器時,您提供了名稱(與Blinker相同),但是當您通知偵聽器時,您直接將數據作爲關鍵字參數傳遞。由於傳遞數據的關鍵字參數方法,可以使用PubSub進行更多的安全檢查。

就我個人而言,我會去與Signals,因爲它符合我的想法更好,但PubSub當然也有一席之地。

+2

死靈法師獎! :) – 2013-02-14 00:53:38

+0

以上PubSub url鏈接已死;嘗試:http://pubsub.sourceforge.net/ – DevPlayer 2015-01-31 00:52:20

+0

@DevPlayer:謝謝,更新我的鏈接。 – 2015-08-31 15:06:26

4

這可能清理髮布訂閱究竟如何涉及信號:http://pubsub.sourceforge.net/apidocs/concepts.html

發佈訂閱便於在應用程序內的部件的解耦(可調用,模塊,包)。它通過:應用程序的

  • 允許部分,而不必知道
    • 發送消息到「應用程序的其餘部分,」如果消息將被處理:
      • 也許消息將被完全忽略,
      • 或由應用程序的許多不同部分處理;
    • 消息將如何處理:
      • 究竟會與消息及其內容進行;
      • 以什麼順序,任何給定的消息將被髮送到應用程序的其餘部分;應用程序的
  • 允許部分接收和處理來自「應用程序的其餘部分」的消息,而無需知道是誰發送的消息。

監聽器是「希望接收消息的應用程序的一部分」。監聽者訂閱一個或多個主題。發件人是應用程序的任何部分,要求Pubsub發送給定主題的消息。發件人提供數據(如果有的話)。 Pubsub會將消息(包括任何數據)發送給消息主題的所有聽衆。

+3

這些東西不都適用於信號和接收器嗎? – matthewwithanm 2012-10-10 03:18:33

相關問題