27

PyPubSubから:

Pypubsubは、Pythonアプリケーションがそのコンポーネントを分離するための簡単な方法を提供します。アプリケーションの一部は(データの有無にかかわらず)メッセージを公開でき、他の部分はメッセージをサブスクライブ/受信できます。これにより、メッセージ「送信者」とメッセージ「リスナー」がお互いに気付かないようになります。

  • 一方はもう一方をインポートする必要はありません
  • 送信者は知る必要はありません
    • 「誰が」メッセージを受け取る、
    • リスナーがデータをどのように処理するか、
    • または、リスナーがメッセージデータを取得する場合でも。
  • 同様に、リスナーはメッセージの送信元について心配する必要はありません。

これは、Model-View-Controllerアーキテクチャー、またはそのコンポーネントの分離を促進する同様のアーキテクチャーを実装するための優れたツールです。

PyPubSubからPyDispatcher 、単純な「家庭料理」クラスまで、Web上でフローティングを公開/サブスクライブするためのPythonモジュールがかなりあるようです。

異なるモジュールを比較する場合、特定の長所と短所はありますか?どのモジュールのセットがベンチマークされ、比較されましたか?

前もって感謝します

4

7 に答える 7

16

PyDispatcherDjangoで頻繁に使用されており、私にとって(そして、Djangoコミュニティ全体にとって)完璧に機能しています。

私が覚えているように、いくつかのパフォーマンスの問題があります。

  • PyDispatcherによる引数チェックは遅いです。
  • 未使用の接続には不要なオーバーヘッドがあります。

ちなみに、中小規模のアプリケーションでこの問題が発生する可能性はほとんどありません。したがって、これらの問題はあなたには関係ないかもしれません。あらゆるパフォーマンスが必要だと思われる場合(時期尚早の最適化はすべての悪の根源です!)、DjangoのPyDispatcherに加えられた変更を確認できます。

お役に立てれば。

于 2008-09-22T18:44:43.627 に答える
4

Python に最適なディスパッチ パッケージは、django 内のディスパッチ モジュール(ドキュメントではシグナルと呼ばれます) のようです。それは django の残りの部分から独立しており、短く、文書化され、テストされ、非常によく書かれています。

編集:このプロジェクトを Python 用の独立したシグナル プロジェクトにフォークしました。

于 2010-04-03T21:13:25.987 に答える
2

最近、py-amqplibを注意深く調べて、RabbitMQブローカーのAMQPクライアントとして機能しました。後者のツールはErlangで書かれています。

アプリを切り離そうとしている場合。では、なぜそれを言語自体に結合するのでしょうか。言語に依存しないメッセージキューの使用を検討してください。そうすれば、本当に成長する余地があります。

そうは言っても、AMQPは理解するのに努力を要し、アプリの場合は喜んで引き受ける以上の可能性があります。そのまま正常に動作しています。YMMV。

于 2008-09-22T19:19:31.733 に答える
2

ここに新しいものがあります: https://github.com/shaunduncan/smokesignal。" Smokesignal は、シグナルを送受信するためのシンプルな Python ライブラリです。これは、django シグナル フレームワークからインスピレーションを得ていますが、汎用目的のバリアントとして意図されています。 " 例:

from time import sleep
import smokesignal

@smokesignal.on('debug')
def verbose(val):
    print "#", val


def main():
    for i in range(100):
        if i and i%10==0:
            smokesignal.emit('debug', i)
        sleep(.1)

main()
于 2013-06-04T12:45:37.990 に答える
2

まだ言及されていない、私が見つけたいくつかのライブラリ:

于 2009-06-01T23:03:28.510 に答える
1

PJ Eby、RuleDispatch、および PEAK プロジェクト、特に Trellis によるライブラリもあります。実際の状況はわかりませんが、メーリング リストは非常に活発です。

PyPi 上の Trellis の最新バージョン

トレリス ドキュメント

BBC のKamaelia プロジェクトのコンポーネントも使用しました。Axon は興味深いアプローチですが、パブリッシャーとコンシューマーにインスパイアされたよりも多くのコンポーネントがあります。まあ、そのウェブサイトは少し最新ではありません... Google SoC 2008 には 1 つまたは 2 つのプロジェクトがあり、作業が行われています。

それが役立つかどうかわからない:)

編集:オブザーバーパターンの「非正統的な」実装であるPy-notifyを見つけました。自分のツールに必要なほとんどの機能を備えています。

于 2008-09-22T20:52:03.947 に答える
0

PyPubSub がやや無秩序に管理されているプロジェクト (SF の Wiki は終了しており、SF にリンクされている Web サイト (別の Wiki) は現在壊れている) のように見えるという事実だけでも、私がそれを使用しない十分な理由になります。PyDispatcher には無傷の Web サイトがありますが、それらが提供しているように見える唯一のドキュメントは、docstring から生成された API に関するものです。メーリングリストにもトラフィックがありません...悪い兆候です!

Mike も述べたように、Python に依存しないソリューションを選択することは完全に可能です。誤解しないでほしいのですが、私は Python が大好きですが、それでもこの分野では、プログラミング言語から切り離されたフレームワークを使用することは理にかなっています。

メッセージングの経験はありませんが、いくつかのソリューションを検討する予定です。これまでのところ、次の 2 つの (無料のオープン ソース) プロジェクトが私にとって最も有望なようです (偶然にも、どちらも Apache プロジェクトです)。

どちらも、少なくともドキュメントとコミュニティに関しては、かなり成熟したプロジェクトのようです。私はソフトウェアの品質についてコメントすることはできませんが、私が言ったように、私はどのソフトウェアも使用しませんでした.

Qpid には Python 用のクライアント ライブラリが付属していますが、py-amqplibを使用することもできます。ActiveMQ にはpyactivemqがあり、STOMP (Streaming Text Orientated Messaging Protocol) または Openwire 経由で接続するために使用できます。

于 2009-02-17T13:28:17.127 に答える