asyncioモジュールは、
一度に Python 3.4標準ライブラリに登場しました。これにより、非同期コードを便利かつ迅速に記述できるようになりました。 そしてすでにPython 3.5では、async / await構文が構文に追加され、最終的にすぐに使用できる非同期が言語の美しく調和のとれた部分になりました。
asyncio自体は負荷の高いWebアプリケーションを作成できますが、モジュールを作成する際のパフォーマンスの最適化は優先事項ではありませんでした。
前述のPEP-492(async / await)Yuri Selivanov(Habré-
1st1 、
彼のtwitter )の著者の1人は、asyncio-
uvloopのイベントループの代替実装の開発を取り上げました。 昨日、モジュールの最初のアルファ版がリリースされました。これについて、著者は
詳細な投稿を書きました。
要するに、uvloopはNode.jsの約2倍の速度で実行され、Goプログラムにほとんど劣っています。
使用する
uvloopはCythonで記述され
、libuvの上に構築されます。
モジュールを標準としてインストールできます(Windowsは現在サポートされていません):
pip install uvloop
使用も難しくありません:
import asyncio import uvloop asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
これで、asyncio.get_event_loop()を呼び出すと、uvloopインスタンスが返されます。
性能
ベンチマークに関する詳細情報(方法論と結論)
は元のにありますが、以下は最終的なグラフのみです。
サイズの異なる単純なTCP要求の結果:

HTTPリクエスト:
