私たちは大量の非同期 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 は通常、スレッドの考え方のどこにいるのかは関係ありません。それにもかかわらず、そのモンキーパッチが本当にそのように機能する場合は、すごい. うわー!