circus+chaussette+meinheldを動かしてみる

Tarekさんが面白いものを作ってるみたいなので、動かしてみる。
http://pypi.python.org/pypi/circus/
http://pypi.python.org/pypi/chaussette/
試した環境はUbuntu12.04でPython2.7.3。
ライブラリのバージョンは以下の通り。

chaussette==0.4
circus==0.5.1
meinheld==0.4.15

インストール

circusはZeroMQに依存しているので、予めaptでインストールしておく。

$ sudo aptitude install libzmq-dev

mkvirtualenvでvirtualenv環境を作って、circusをpipでインストール。

$ pip install circus

これで依存モジュールもインストールできた。
chaussetteとmeinheldは特に依存はないので、そのままインストール。

$ pip install chaussette meinheld

動かしてみる

設定ファイルとアプリケーションを同じディレクトリに作成する。

hello.ini

circus用の設定ファイルを用意。
cmdではvirtualenv内のchaussetteコマンドを直接指定している。

[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555

[watcher:hello]
cmd = /home/tokibito/.virtualenvs/circus-hello/bin/chaussette --fd $(circus.sockets.web) --backend meinheld server.app
use_sockets = True
numprocesses = 5

[socket:web]
host = 0.0.0.0
port = 8000

chaussetteのドキュメントにはfdの指定が${sockets.web}のようになっていたが、バージョンが上がると記述方法が変わるっぽい?

server.py

簡単なwsgiアプリケーションを用意。

def app(environ, start_response):
    start_response("200 OK", [('Content-Type', 'text/plain')])
    return "Hello, world!\n"
実行

作成した設定ファイルを指定してcircusdを起動

$ circusd hello.ini

curlで叩いてみる。

$ curl http://127.0.0.1:8000/
Hello, world!

管理はcircusctlコマンドで行なう。endpointで指定したアドレスとポートが使われる。

$ circusctl stats
hello:
7492: 7492  python tokibito 0 13M 48M 0.0 1.4 0:00.73
7493: 7493  python tokibito 0 13M 48M 0.0 1.4 0:00.47
7490: 7490  python tokibito 0 13M 48M 0.0 1.4 0:00.95
7491: 7491  python tokibito 0 13M 48M 0.0 1.4 0:00.87
7489: 7489  python tokibito 0 13M 48M 0.0 1.4 0:00.96

なかなか良さそう。