Python DevCamp 2006

明日から富士でおこなわれるPython DevCamp 2006に行ってきます。泊りがけでコーディング(+ドキュメント)ざんまいということで、とても楽しみ。

http://nagosui.org/Nagosui/Misc/temporary-items/events/devcamp2006s

ここで、いくつかトラックと言うかコースがあるんですが、その中でWebアプリケーションスプリントに、TurboGearsで参加する予定です。お題はWebチャット。

http://www.python.jp/pipermail/python-ml-jp/2006-September/003702.html

ちなみに当日参加できない人でも、IRCでのリモート参戦が可能です。

TurboGearsで出力をストリームする

...というわけで、チャットならば「やっぱリアルタイムだよね。ポーリングしたくないし」、サーバーとクライアントのコネクションをはりっぱにする方法を前もって見つけておこうと思って、調べていました。

結論を言うととても簡単で、

1. CherryPyの stream_response という設定を True にする。

cherrypy.config.update({'/getstrings': {'stream_response': True}})

2. @exposeしたメソッドの戻り値として、ジェネレータを返す。

とすれば、あとはジェネレータが好きなだけクライアントにレスポンスをストリームできます。1.の設定をしないとすべてのレスポンスが揃うまですべてバッファリングしてしまいます。

http://docs.cherrypy.org/return-versus-yield

ハマった点は、エラー出力を格好良くする方法 http://d.hatena.ne.jp/yach/20060919 を使っていると、1.の設定をしても結果がバッファされてしまうこと。これがわからなくて、CherryPyのソースを行ったり来たりすることになりました。まあ勉強になったのでヨシ。