舞風作った

暗い雰囲気は苦手です。 https://github.com/methane/MyKaze

Tornado で MySQL 使うの、まぁ ワーカースレッドでやれる んだけど、 なんかかっこ悪いよね。せっかくだから Tornado の仕組みで通信したいよね。

ってことで、 PyMySQL の中の socket を Tornado の IOStream に置き換えて、同期型APIを greenlet で回避する MyKaze 作りました。

アイデアは全然オリジナルじゃなくて、 gevent もこれベースだし、 MongoDB は Motor っていう greenlet で PyMongo を Tornado ようにラップしてたりします。

接続はブロックするままです(逆に言えば ioloop 回してコールバックの中に入らなくても先に接続できる)し、 タイムアウトも未実装の Proof of Concept です。 Tornado 側にも PyMySQL 側にもこういったモジュール書きやすい仕組みを用意してもらって、将来的には PyMySQL のハック版ではなく プラグインっぽく実装できればと思ってます。

通信がブロックするタイプのライブラリをハックして Tornado で動かしたいときは改造方法が参考になるかもしれません。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。