Google Summer of CodeでのPythonプロジェクト-gevent

すでに春です。つまり、夏が来ており、次のGoogle Summer of Codeは多くの経験を積む機会であり、何らかの物質的な報酬を得る機会でもあります。 私はあなたが夏休み中にあなたが助けることができる1つの興味深いプロジェクトについて話したいと思います-gevent

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.dnsgevent.http )があります。 たとえば、 リンクをたどり、Pythonで作成されたWSGIサーバー間のベンチマークの結果を確認することにより、geventの速度を確認できます。

そして今、geventのGSoCのアイデアについて具体的に説明しますが、これまでのところ2つしかありませんが、独自の提供を妨げるものではありません。

ご存じのように、 greenlet使用されるgreenletモジュールは、Stackless Pythonのほんの一部です。 そして、Stackless Pythonでgeventを動作させてください。 第一に、後者については、ノンブロッキングソケットを実装する高品質のライブラリがまだ存在せず、表示される場合、Stackless Pythonユーザーは非常に感謝します。 第二に、Stackless Pythonの「タスクスレッド」はグリーンレットよりも高速に動作します。これにより、geventで記述されたアプリケーションの速度が大幅に向上します。

イベント処理サイクルの実装については、考えを述べます。

好奇心が強い場合は、GSoCの公式メーリングリストを購読してください。GSoCプロジェクトの議論はまだ始まったばかりです。

Source: https://habr.com/ru/post/J87793/


All Articles