36

私たちは大量の非同期 io を必要とするアプリに Twisted を広く使用しています。代わりに CPU バウンドの場合があり、そのためにプロセスのプールを生成して作業を行い、複数のサーバー間でこれらを管理するためのシステムも備えています - すべて Twisted で行われます。よく働く。問題は、新しいチーム メンバーを最新の状態に導くのが難しいことです。Twisted で非同期コードを書くには、垂直に近い学習曲線が必要です。まるで人間がそのように自然に考えていないかのようです。

おそらく、混合アプローチを検討しています。おそらく、xmlrpc サーバー部分とプロセス管理を Twisted に保持し、他のものを少なくともある程度同期しているように見えるコードで実装しますが、そうではありません。繰り返しになりますが、明示的よりも暗黙的が好きなので、これについてもう少し考えなければなりません。とにかくグリーンレットに - それはどのくらいうまく機能しますか? つまり、Stackless があります。私の Gallentean アバターからわかるように、CCP の主力製品である EVE Online ゲームで Stackless が使用され、大きな成功を収めていることを私はよく知っています。Eventlet や gevent はどうですか? 今のところ、Twisted で動作するのは Eventlet だけです。ただし、gevent は純粋な python 実装ではなく、代わりに libevent に依存しているため、より高速であると主張しています。また、特異性や欠陥が少ないと主張しています。イベント私が知る限り、それは 1 人の男性によって維持されています。これは私をやや不安にさせますが、すべての優れたプロジェクトはこのように開始されるため...次にPyPyがあります-私はまだそれについて読み終え​​ていません-ちょうどこのスレッドで見ました: Drawbacks of Stackless

非常に紛らわしいです-一体どうすればよいのだろうか-Eventletがおそらく最善の策のように思えますが、それは本当に十分に安定していますか? 誰でも経験がありますか?代わりに Stackless を使用する必要があります。これは、Twisted と同様に、実績があり、テクノロジが証明されているためです。それらはうまく連携します。それでも、これを行うために別のバージョンの Python を用意しなければならないのは嫌です。何をすべきか....

ただし、このやや不快なブログエントリは、私にとっては頭に釘を打ちました: Asynchronous IO for Grownups I don't get the Twisted is being like Java の発言私にとって Java は通常、スレッドの考え方のどこにいるのかは関係ありません。それにもかかわらず、そのモンキーパッチが本当にそのように機能する場合は、すごい. うわー!

4

4 に答える 4

28

あなたはチェックアウトしたいかもしれません:

Eventlet と gevent は、実際には Stackless と同等ではありません。Stackless には、タスクレットを認識しない標準ライブラリが付属しているためです。スタックレス用のソケットの実装はありますが、 gevent.monkeyほど包括的なものはありません。CCP は基本的なスタックレスを使用しません。スタックレス I/O と呼ばれるものがありますが、これは私の知る限り Windows のみであり、オープンソース化されたことはありません (?)。

eventlet と gevent の両方を、greenlet ではなく Stackless で実行するように作成できます。ある時点で、これをGSoC プロジェクトとして実行しようとさえしましたが、学生を見つけることができませんでした。

于 2010-06-16T04:21:28.033 に答える
4

質問の一部に答える - http://speed.pypy.orgを見ると、PyPy の上で twisted を使用すると、速度が向上する可能性があることがわかります。もちろん、これはワークロードによって異なりますが、おそらくチェックする価値があります。

乾杯、
フィハル

于 2010-07-29T19:23:10.260 に答える
0

Geventは純粋なPythonではなく、CPythonに厳密に依存しています。Webフレームワークから、 Eventlet(OpenStack)とTornado(FriendsFeed、Quora)が最大のデプロイを持っているとおっしゃいました。

于 2013-01-29T18:11:00.883 に答える
0

私は eventlet と repoze.bfg の上に小さなリアルタイム Web アプリを構築しました (私はかなり前に django をあきらめました)。イベントレットとモンキーのパッチ適用は、Ted が言うように簡単であることがわかりました。

于 2010-09-23T14:32:09.223 に答える