SSブログ

Twinado = Tornado + async-python-twitter [tornado]

http://kzk9.net/blog/2009/09/twinado_is_tornado_plus_async-python-twitter.html
早速 tornado で非同期通信する twitter クライアントアプリができてる !

tornado について雑感 [tornado]

昨日の続き
【フレームワークについて】
URL dispatch と request/response を抽象化する機能はあるし、テンプレート機能もあるが O/R マッパはない。
RoR や Django と比較すると、Web フレームワークというより CGI モジュールの無限ループ版といった感じ。HTTP リクエストを受けてレスポンスを返す最低限のラッパーといった感じのもの。
その分、フレームワークの規約に沿わないことをしようとして苦労するとか、フレームワークの仕様にはまるとかあまりなさそう。
多言語化の機能↓を使わなければ、shift_jis での入出力もできそうな(そのうち試す)。
http://www.shibu.jp/tornado/walkthrough.html#index-80
携帯向けに、Django で、ミドルウェア書いたりするのより簡単そうな予感がする。

今時、セッション変数に相当する機能も自前でもっていない。セッション変数に相当する機能が必要なら、クッキーの値をキーにした辞書をメモリ内に持つとかで実装することが必要。
Python のソースで 5700行程度しかないので、ソースを全部読むこともできる。非常にシンプルため理解しやすくフレームワーク固有で覚えることも少ないので、最初>の Web プログラミングの勉強のためのプラットフォームにも良いのではないか。

Google App Engine を含む WSGI コンテナで動かすこともできる。
WSGI コンテナで動かすと、 tornado の非同期通信の機能が使えない。

テンプレートはシンプルでわかりやすい。Django のテンプレートを簡単にした感じ?
ただ、インターフェースモジュールの使いどころが、まだよくわかってない自分。
http://www.shibu.jp/tornado/walkthrough.html#index-81
テンプレートにロジックを書く機能がないのでそれを補足するものと理解。

ちょっと手元でサンプルを動かしただけでも、動作が速い感じがする。
tornado の HTTPServer の起動が速いので、それだけでも開発効率が良い感じ。

【インストールについて】
 setup.py install しろと書いてあるけど、 tornado ディレクトリをパッケージとして認識できるところにコピーするだけで動く。Linux + python 2.5 の場合に epoll.c がコンパイルされるが、その組み合わせ以外に
C のモジュールはコンパイルされないし、epoll.c がなきゃないで、 select が使われるだけ。

【database モジュールについて】
tornado/database.py の 200行以下のコードで薄くラップしてる MySQL 専用
1.autocommit
2.cursor の open/close を隠蔽する
3.結果のフィールドが行ごとにプロパティとして取得できるように変換
 (↑テンプレートに渡すのに都合が良いように)
などを実現してるけど、tornado で RDBMS を使う上で特に必須ではない。
他の RDBMS を使えるようにする配慮はいっさいない
そもそも、O/R マッパーではなく、アプリの中で SQL を記述しちゃうので、テスト環境
で sqlite 本番で MySQL とかいうことは無理。
別の RDBMS を使う場合には、同じようなラッパーを書いた方が良いと思うが、database.py と API をあわせる必要ないかと。connection をスレッド間で共有できる DBAPI なら、(多少手間はかかるけど)ラッパー書く必要もない。
demos/blog では、アプリケーショングローバルに DB 接続変数を置いている。
「いっぱい接続したい場合は、HTTPServer を立ち上げて手前に nginx 置け」ということかと。
(追記 9/24)
http://www.hyuki.com/yukiwiki/wiki.cgi?HowFriendFeedUsesMySqlToStoreSchemaLessData

tornado 0.2 同梱のサンプルを読む [tornado]

http://nakagami.blog.so-net.ne.jp/2009-09-17 の続き
tornado のアーカイブの demos ディレクトリにサンプルがいろいろあった。
読んでみた。

helloworld
  伝統の Hello World
  http://www.shibu.jp/tornado/start.html のサンプルとほぼ同じ(微妙に違う)
auth
  Google の OpenID でログインするサンプル
  Google から受け取った認証情報を json フォーマットでクッキーに保存
blog
  Blog サンプル、と言ってもコメントやトラックバック機能なし
  典型的な Web アプリのサンプル
    データは、MySQL へ
    認証は Google OpenID。初回ログイン時にユーザーレコードを MySQL に作成
    テンプレートを使っていてテンプレート継承も使っている
    ユーザーインターフェースモジュール↓も使っている
    http://www.shibu.jp/tornado/walkthrough.html#index-81
  データーベースコネクションは Application global な変数で保持している
appengine
  demos/blog/ の AppEngine 版
chat
  非同期通信のサンプルとしてのチャットアプリ
  認証は google OpenID
  テンプレートの例がシンプルなので、demos/blog/templates より前に見るべし
facebook
  Facebook アプリのサンプル
wsgi
  Tornado の HTTP Server が WSGI 関数を処理するコンテナサンプル
  WSGIContainer クラスは、まだ production 環境でテストされてないとのこと
  testwsgi.py 関数を WSGI アプリとみなすコンテナ
  testweb.py demos/wsgi/web にある web.py の WSGI アプリのコンテナ
django
  Django を wsgi で tornado をコンテナにしてサービスするサンプル
  必要なら、 wsgi/testwsgi.py と見比べてみるべし