暗い雰囲気は苦手です。 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 で動かしたいときは改造方法が参考になるかもしれません。