非同期IOに向いている
非同期処理に向いている
- IOの待ち時間が長い処理
- コネクションの取得
- 外部サービス、APIの呼び出し
非同期処理に向いていない
- CPUバウンドと言われる処理
Pythonで非同期処理をするための選択肢
選択肢が多く、どれがスタンダードなのか分かりづらい
- Twisted
- イベント駆動型のネットワークプログラミングフレームワーク
- TCP, UDP, SSL/TSL, HTTP, SSH, FTP
- Tornado
- Facebookが開発
- 非常に高速
- よく使われている?
- gevent
-
スレッド、マルチプロセス、etc…
- asyncio
- PEP3156
- Python3.3以上からサポート
- Python3.4で標準ライブラリ化
- Unixシグナルが使える
- 任意の箇所で処理を停止し、また再開する
- 呼び出し可能オブジェクトの非同期実行をカプセル化する
これまでasync系がサポートされなかった理由
Cのasync系を扱う方法はあったがサポートされるところまでいってなかった
Python作者の意向で新しい基板で実装したかったらしい