2

これは、「必要な」ことを実行するように見えますが、ショートカットが悪いと感じています。つまり、これらすべての pub-sub ライブラリには理由がありますよね?

def fakeMessagePasser(myFunction, listOfListeners):
    for obj in listOfListeners:
        try:
            success = getattr(obj, myFunction)()
        except AttributeError:
            handleTheSituationCorrectly()

Python が許可よりも許しを求めることを好むことは知っていますが、もしそうなら、そもそも「複雑な」サブスクリプション ベースのオブジェクト メッセージング ライブラリに煩わされるのはなぜでしょうか? 言語はこれを本質的に処理するように設定されているようです-しかし、よくあることですが、私の知識に大きな穴があり、そうでなければこれが悪いことである理由を教えてくれるかもしれません.

これは良いですか、別の言い方をすれば、意図された- try/except の適用ですか? たとえば、ゲーム ループで次のようなものが表示されたとします。

#incoming pseudocode, not based on anything in particular
for enemy in objectQueue:
    if enemy.hasGoodGuyInSights():
        try:
            enemy.attack()
        except AttributeError: ##maybe this object has no attack method, it just 'follows' or something, who knows why bad guys do anything really
            handleTheSituationCorrectly()

これは家族の死などに直接寄与するものではありませんが、try/except をうまく利用しているのでしょうか。

私は通常、型チェックの代わりに try/except を見ているように感じるので、質問します。オブジェクトを特定の型であるかのように扱い、それが失敗した場合は正しく処理したいのです。したがって、try/except を使用してリストまたは dict を反復処理することと、それを使用してメソッドを呼び出してから、その「not-a-message」を正しく失敗/無視することには違いがあるようです。右?

4

1 に答える 1

0

あなたが説明することは、限られた方法でpub-subをシミュレートできます.最小限のテストフレームワークには十分だと思います. ただし、本番環境で必要になるいくつかの重要な側面を見逃しています。

  • 非同期処理。Twisted などの非同期フレームワークでは、promise とコールバックを使用して操作の相対的な順序を強制しますが、他の操作が待機している間に一部の操作を処理できるようにします。
  • クラスタリング。メソッドでは、すべてが 1 つのプロセス/スレッド内で発生する必要があります。ブローカーを使用して pub-sub を実行する場合、ワーカー コードを変更せずにクラスター化できます (ワーカー コードが正しく設計されている場合)。
于 2013-11-06T20:41:31.627 に答える