6

多くの Python ライブラリは、最近作成されたものでも、httplib2 またはソケット インターフェイスを使用してネットワーク タスクを実行します。

これらは、ブロックする性質があるため、明らかに Twisted よりもコーディングが容易ですが、これは他のコード、特に GUI と統合する場合の欠点だと思います。マルチスレッドを回避しながら、スケーラビリティ、同時実行性、または GUI 統合が必要な場合は、Twisted が自然な選択です。

したがって、これらの問題に関する意見に興味があります。

  1. 新しいネットワーキング コード (小さなコマンド ライン ツールを除く) は Twisted で書くべきですか?
  2. 同じプロジェクトに Twisted、http2lib、またはソケット コードを混在させますか?
  3. Twisted はほとんどのライブラリで pythonic ですか (代替よりも複雑で、非標準パッケージへの依存関係を導入しています...)?

編集:これを別の言い方で表現させてください。Twisted を使って新しいライブラリ コードを書くと、その採用の障壁になると思いますか? Twisted には明らかな利点があります (特に、gimel が述べている移植性とスケーラビリティ)。

4

2 に答える 2

5

asychronous-programming-in-python-twisted を参照してください。非標準 (外部) ライブラリに依存することがニーズに合っているかどうかを判断する必要があります。@Glyphによる回答に注意してください。彼はTwistedプロジェクトの創設者であり、Twisted関連する質問に正式に回答できます。

Twisted のようなライブラリのコアでは、メイン ループの関数はスリープではなく、select() や poll() などのオペレーティング システムの呼び出しであり、Python の select モジュールのようなモジュールによって公開されます。これは、プラットフォーム間で大きく異なる API であり、ほぼすべての GUI ツールキットに独自のバージョンがあるためです。Twisted は現在、このテーマの 14 の異なるバリエーションへの抽象的なインターフェースを提供しています。そのような API が提供する一般的なことは、「ここに、私が待っているイベントのリストがあります。そのうちの 1 つが発生するまでスリープ状態になり、次に起きて、それがどのイベントであったかを教えてください」と言う方法を提供することです。 "

于 2009-05-11T06:46:53.483 に答える
0
  1. 新しいネットワーキング コード (小さなコマンド ライン ツールを除く) は Twisted で書くべきですか?
    • 多分。それは本当に依存します。ブロッキング呼び出しを独自のスレッドにラップするだけで十分な場合もあります。Twisted は大規模なネットワーク コードに適しています。
  2. 同じプロジェクトに Twisted、http2lib、またはソケット コードを混在させますか?
    • もちろん。ただし、Twisted はシングル スレッドであり、Twisted でのブロッキング呼び出しはエンジン全体をブロックすることを覚えておいてください。
  3. Twisted はほとんどのライブラリで pythonic ですか (代替よりも複雑で、非標準パッケージへの依存関係を導入しています...)?
    • Python 標準ライブラリに属していると主張する Twisted 熱狂者がたくさんいます。しかし、多くの人は asyncore/asynchat を使用して適切なネットワーク コードを実装できます。
于 2009-05-11T06:58:25.010 に答える