Pythonのしゃれおつコールグラフが表示できるplopを使う

tornado のメンテナ?をしている bdarnell 氏のプロジェクト plop 。 D3を使ったコールグラフを出力することができます。

使い方

インストール

$ pip install plop

プロファイルする。

$ python -m plop.collector autopep8.py autopep8.py
$ ls /tmp/plop.out
-rw-rw-r-- 1 hattori hattori    40397  5月 12 22:41 plop.out

デフォルトだと /tmp/plop.out にプロファイルデータがダンプされる。 コールグラフ表示してみる。

$ python -m plop.viewer --port=8911 --datadir=/tmp

ブラウザから /tmp/plop.out をクリックすると以下のようなコールグラフが表示されます。

http://image.hexacosa.net/images/container/000000000000045f_l.png

BitTorrent SyncをLinuxに導入する

ドキュメントあります が、インストールメモを。

$ wget "http://btsync.s3-website-us-east-1.amazonaws.com/btsync_i386.tar.gz"
$ tar tzvf btsync_i386.tar.gz
-rwxrwxr-x sync_build/sync_build 3241548 2013-05-08 22:54 btsync
-rw-rw-r-- sync_build/sync_build     155 2013-05-07 23:16 LICENSE.TXT
$ tar xzf btsync_i386.tar.gz btsync

btsync がバイナリ。 --dump-sample-config オプションで設定ファイルのテンプレートを 表示することができます。それを参考に設定ファイルを作成します。 私の場合は以下のような設定にしました。

$ btsync --dump-sample-config
$ cat btsync.conf
{
  "device_name": "azuti",
  "listening_port": 0,
  "storage_path": "/home/foobar/.sync",
  "check_for_updates": true,
  "use_upnp": true,
  "download_limit": 0,
  "upload_limit": 0,
  "shared_folders": [
    {"secret": "YOUR_SECRET",
     "dir": "/home/foobar/BTSYNC"
    }
  ]
}

起動してみます。

$ mkdir /home/foobar/BTSYNC
$ btsync --nodaemon --config btsync.conf

あとはSupervisordとかで動かしたりしておけばOKですね。 --config オプションを指定しない場合は、ブラウザからWebUI経由で設定変更したり、 共有状況を把握できたりもできます。

いいですねー、おわり。

Python製Foremanクローンのhonchoを使ってみた

Foreman はProcfileベースのプロセス管理ライブラリで、 honcho はそのPythonポーティングです。

便利そうなので使ってみます。 honchoの最新リリースバージョンは0.4.0 です。

インストールから起動まで

インストール

$ pip install honcho

今回はbottle.pyを使ったWebアプリを2つ起動してみます。

# app.py
import sys
from bottle import run

def main():
    run(port=int(sys.argv[1]))

if __name__ == '__main__':
    main()
# Procfile
web1: python app.py 8081
web2: python app.py 8082

設定ファイルをチェックして起動してみます。

$ honcho check
INFO: Valid procfile detected (web1, web2)
$ honcho start
23:44:18 web1.1 | started with pid 7117
23:44:18 web2.1 | started with pid 7118
23:44:18 web1.1 | Bottle v0.11.6 server starting up (using WSGIRefServer())...
23:44:18 web1.1 | Listening on http://127.0.0.1:8081/
23:44:18 web1.1 | Hit Ctrl-C to quit.

23:44:18 web2.1 | Bottle v0.11.6 server starting up (using WSGIRefServer())...
23:44:18 web2.1 | Listening on http://127.0.0.1:8082/
23:44:18 web2.1 | Hit Ctrl-C to quit.

^CSIGINT received
23:44:20 system | sending SIGTERM to all processes
23:44:20 system | sending SIGTERM to pid 7118
23:44:20 web1.1 | process terminated
23:44:20 web2.1 | process terminated

設定ファイルのエクスポートは upstart にしか対応してないみたいです。

$ honcho export upstart .
$ ls -ltr
-rw-r--r-- 1 root root 328 May  8 19:38 testhoncho.conf
-rw-r--r-- 1 root root  56 May  8 19:38 testhoncho-web2.conf
-rw-r--r-- 1 root root 213 May  8 19:38 testhoncho-web2-1.conf
-rw-r--r-- 1 root root  56 May  8 19:38 testhoncho-web1.conf
-rw-r--r-- 1 root root 213 May  8 19:38 testhoncho-web1-1.conf
$ honcho export inittab .
usage: honcho export [-h] [-e ENV] [-d APP_ROOT] [-f PROCFILE] [-s SHELL]
                     [-u USER] [-c process=num,process=num] [-p N] [-l DIR]
                     [-a APP]
                     FORMAT LOCATION
honcho export: error: argument FORMAT: invalid choice: 'inittab' (choose from 'upstart')

Supervisord用の設定ファイルをエクスポートする

upstart にしか対応していないと思いきや、 GitHubリポジトリをみるとSupervisordに対応しているではありませんか!!

以下のような感じで導入できます。

$ pip install --upgrade git+git://github.com/nickstenning/honcho.git
$ honcho export supervisord -a fooapp dummydir
$ cat dummydir/app.conf
[program:fooapp-web1]
command=python app.py 8081
autostart=true
autorestart=true
stopsignal=QUIT
stdout_logfile=/var/log/fooapp/web1-1.log
stderr_logfile=/var/log/fooapp/web1-1.error.log
user=root
directory=/home/hattori/tmpapp
environment=PORT="5000"
[program:fooapp-web2]
command=python app.py 8082
autostart=true
autorestart=true
stopsignal=QUIT
stdout_logfile=/var/log/fooapp/web2-1.log
stderr_logfile=/var/log/fooapp/web2-1.error.log
user=root
directory=/home/hattori/tmpapp
environment=PORT="5100"

[group:fooapp]
programs=fooapp-web1,fooapp-web2

設定ファイルが作成されるので、 所定のディレクトリに置いてリロードすればOK。

$ cp -p dummydir/fooapp.conf /etc/supervisor/conf.d/
$ supervisorctl reload

いいですね。 パイロット段階では honcho start 使って、 恒久的に動かしたくなったらsupervisord用の設定ファイルを書き出して、 supervisordから起動すればOKと。

Zsh補完関数

あとネタがないので、 honchoのZsh補完関数 書いてみました。 よかったら使ってみてください。

ちなみに

foremanもhonchoも 管理者 みたいな意味なんですね。

jubatus関連コマンドのZsh補完関数を書きました

pyrapidjsonをリリースしました

netsniff-ngコマンドのZsh補完関数を書きました

Older Blog Posts