geventは、 同期 APIを使用して非同期ネットワークアプリケーションを作成できるPythonのライブラリです。 ご
greenlet
、これには
greenlet
を使用します。 上記を以下のコード例で説明します (bitbucketの公式プロジェクトリポジトリから取得)。
"" "複数のワーカーを生成し、完了するまで待機する" "" urls = ['http://www.google.com'、 'http://www.yandex.ru'、 'http://www.python.org'] インポートgevent geventインポートモンキーから monkey.patch_all() urllib2をインポート def print_head(url): 'Starting%s'%urlを印刷します data = urllib2.urlopen(url).read() print '%s:%s bytes:%r'%(url、len(data)、data [:50]) jobs = [urlsのurlのgevent.spawn(print_head、url)] gevent.joinall(ジョブ)
このコードの主な魅力は、
urllib2.urlopen
を使用してページを受信するすべてのリクエストが並行して実行されることです。
socket
モジュールを使用するライブラリでも同様のトリックを実行できます。 興味がありますか? geventを使用して作成されたアプリケーションで、SQLAlchemyなどの強力なライブラリを使用することさえできました(もちろん、PythonソケットでDB-API 2.0アダプターを使用する必要があります)。 要約-非同期I / Oを実行し、コールバックを実行しない読み取り可能なコード(Twistedを覚えていますか?) なぜ速いと主張しているのですか? 「内部」であるため、gevent- Libeventは、完全にCコードであるイベントループを提供する高速で実績のあるライブラリです。 また、Libeventに加えて、geventが使用するDNSリゾルバーとHTTPサーバー(モジュール
gevent.dns
、
gevent.http
)があります。 たとえば、 リンクをたどり、Pythonで作成されたWSGIサーバー間のベンチマークの結果を確認することにより、geventの速度を確認できます。
そして今、geventのGSoCのアイデアについて具体的に説明しますが、これまでのところ2つしかありませんが、独自の提供を妨げるものではありません。
- Stackless Pythonで使用するためのgeventの移植。
- libevent以外のgeventでのイベントループの実装。
ご存じのように、
greenlet
使用される
greenlet
モジュールは、Stackless Pythonのほんの一部です。 そして、Stackless Pythonでgeventを動作させてください。 第一に、後者については、ノンブロッキングソケットを実装する高品質のライブラリがまだ存在せず、表示される場合、Stackless Pythonユーザーは非常に感謝します。 第二に、Stackless Pythonの「タスクスレッド」はグリーンレットよりも高速に動作します。これにより、geventで記述されたアプリケーションの速度が大幅に向上します。
イベント処理サイクルの実装については、考えを述べます。
- geventループとGUIライブラリのループ(pygtk、PyQt4)の統合。
- Nginx mod_wsgiは、geventループを実装するために使用できるポーリングインターフェイス用のAPIを提供します-想像してください-非同期Pythonアプリケーションのサーバーとしてのnginx。 私には素晴らしいですね。
好奇心が強い場合は、GSoCの公式メーリングリストを購読してください。GSoCプロジェクトの議論はまだ始まったばかりです。