Tornado-MySQL をリリースしました

PyMySQL をベースに Tornado をサポートした Tornado-MySQL をリリースしました。

単に IO 部分を Tornado に置き換えるだけでなく、簡単なコネクションプールも作りました。

通常のリクエスト−レスポンス型のWebアプリケーションとは異なり、 WebSocket などの長時間実行するプログラムだと、1リクエスト1トランザクションという使い方は合わなくなります。 そこで、Go の sql.DB の様に、基本的には autocommit を利用する前提でプール自体にクエリを実行するメソッドを付け、トランザクションが必要なときだけプールから取り出したコネクションを保持するトランザクションオブジェクトを利用する設計にしました。

プールのサンプルコード

最初は asyncio 用に作って Tornado からも asyncio 用のものを利用するつもりだったのですが、 Tornado が asyncio の Future をサポートするまではどうしても使いにくくなるので、一旦 Tornado 専用に作りました。 将来的に Tornado の asyncio サポートが良くなったら、 asyncio ベースに改造して Tornado 専用のものは止める予定です。

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