Blog Archives

tornadoでWebSocketサーバを動かしてみる

Tornado で HTTP サーバを用意 HTML ファイルの JS が WebSocket サーバと通信 ブラウザでこの HTML ファイルを表示。 WebSocket クライアントが WebSocket サーバにメッセージを送信すると、HTML が書き換わる というようなシナリオを実現するシンプルなデモを作ってみました。 WebSocket Server サーバには表題の通り Python Tornado を利用します。 パッケージのインストール Tornado のビルドには Python のヘッダーファイルが必要です。 以下は RedHat 系でのインストール例です。 コード クラス Tornado.websocket.WebSocketHandler を継承して WebSocket サーバを実装します。 WebSocket

Tagged with: ,
Posted in python, web

Herokuでpsycopg2からPostgreSQLを触ってみる

Heroku で Python から PostgreSQL を使う場合、ドキュメントは Django を前提にしている。 宗教上の理由などにより Django 以外から PostgreSQL を使う場合を想定して、ORM も経由せずに素の psycopg2 から PostgreSQL を操作する方法を調べた。 作成するトイアプリ Ubuntu でコマンドを打ち間違えると、Google の “did you mean” 機能よろしく、候補を教えてくれる。 これと同じようなことをしてくれる “did you mean” サーバを PostgreSQL/Python/Tornado/psycogp2 の組み合わせで作ってみる。 以下の順に実装 Tornado のデプロイ Tornado と PostgreSQL の連携

Tagged with: , , ,
Posted in database, python

TornadoのGET/POSTをベンチマーク

ちょっとした理由から ノン・ブロッキングウェブサーバー Tornado 2.4 の GET/POST の処理能力を計測。 送信データ GET は以下の3種類 UNIX タイムを返す データベースでSELECTを実行 (tornado.gen version)データベースでSELECTを実行 データベースは PostgreSQL 8.4。SQL は 100万件のレコードが入ったテーブルを COUNT。 DB 接続は psycopg と momoko(tornado.gen) を利用。 POST は以下の2種類 RSSファイルをPOSTし、ローカルファイルシステムに保存 GZIP圧縮したRSSファイルをPOSTし、ローカルファイルシステムに保存 RSS ファイルは 165 KB、圧縮したものは 35KB。 フィードは TechCrunch を利用。(http://feeds.feedburner.com/TechCrunch/) 送信回数 10,

Tagged with:
Posted in middleware, python

Tornadoのautoreloadの仕組みを調べた

ノンブロッキング Web サーバ Tornado を利用したサーバをデバッグモードで起動している場合、インポートしているファイルが変更されるとサーバは自動的に再起動する仕組みがある(autoreload)。 $ [I 120825 10:26:20 autoreload:175] /path/to/file.py modified; restarting server Tornado ではどのようにして実現されているのか調べてみた。 処理の流れ 処理の流れは以下のようにシンプル。 I/O イベントループインスタンスを作成 ファイルの最終更新日をチェックするコールバック関数を定期実行スケジューラーに登録 インポートしているファイル群をワッチリストに追加 I/O イベントループを開始 インポートしているファイルの最終更新日が変更されると、スケジューラーの定期実行時に前回との更新日時の比較が行われ、ファイル変更イベントをキャッチしてサーバの再起動がかかる。 ミニマムな実装 tornado/autoreload.py で実装されている。autoreload.py からコア以外はバッサリと切り捨てて一部加工し、ミニマムな実装を目指す。(といっても autoreload.py 自体、コメント込みで300行程度しか無い) Step 1: Build an I/O event loop まずは、何はともあれ I/O

Tagged with: ,
Posted in middleware, python
Archives