14

tornadoとの両方geventが非同期 Python フレームワークであることを理解しています。

ボトルのドキュメントを読んでいると、gevent は実際には非同期ではなく、同期的に動作する何千もの疑似スレッドを作成できることがわかりました。

第 2 に、gevent では要求ハンドラを早期に終了できず、完全な応答を返す必要がありますが、トルネードでは可能です。(ここで間違っていたら訂正してください)

これらのシステムが内部でどのように機能し、どのように異なるのかを詳細に説明できる人がいますか? また、WSGI はこれらのシステムの非同期性をどのように扱うのでしょうか? これらのフレームワークは WSGI に準拠していますか? 準拠している場合、その方法は?

4

2 に答える 2

25

以下をお読みください:

http://en.wikipedia.org/wiki/コルーチン

と:

http://en.wikipedia.org/wiki/Event-driven_architecture

http://en.wikipedia.org/wiki/Event-driven_programming

gevent パッケージはコルーチンを使用し、Tornado はイベント ドリブンです。

駆動型システムでさえ WSGI に簡単にマップすることはできませんが、コルーチン システムは、スレッドのように見えるため、ブロッキング ポイントにパッチを適用して、ブロックされたときにコルーチンを切り替えることができれば、WSGI をサポートするように作成できます。

于 2012-10-10T05:57:34.200 に答える
24

gevent と Tornado は少し異なります。gevent は Twisted (非同期ネットワーク フレームワーク) によく似ていますが、Tornado は Web 専用のフレームワークです。

gevent の主なハイライトは、コルーチンを利用し、コードが同期的に実行されているように見えることですが、実際にはほとんどの IO ブロッキング関数は非ブロッキングであり、制御を gevent メイン ループに返します。これは IO バウンド プログラミングにとって非常に重要です。マルチスレッド コードを記述するのと同じ方法で非常に効率的なシングル スレッド コードを記述できるため、リソースを大量に消費します。

gevent には WSGI リクエスト ハンドラも含まれているため、Tornado のようにスタンドアロンで HTTP リクエストを処理するために使用できます。

Tornado は非同期 Web フレームワークであり、プログラマーが Python で非同期コードを作成することに依存しています。これはBackend、JavaScript や Java のような複数行の匿名クロージャーやクラスがないため、多くの場合、面倒です。したがって、Tornado を使用して適切なコードを記述することは非常に困難です。たとえば、ブロッキング ライブラリを使用するのは面倒です。

実際、どちらのフレームワークもコアは非同期ですが、結果のコードは少し異なります (gevent でプログラミングする方が簡単です)。

実際に Torando と gevent を一緒に使用することもできますが、私はまだ試していません。

于 2012-10-18T13:37:06.103 に答える