kamidanaにバッチモードをつけてみた

github.com

kamidanaにバッチモードをつけた。これは実験的な機能でまだmasterにはマージされていない。 やっぱり一回のコマンドで終わらせたほうが早いので欲しくなってしまった。

ただまだ見通しが良い感じにできていない(そういう意味でもまだ実験的)。

実行時間の比較

雑に単純なテンプレートを3回実行する処理の時間を測る。

個別にレンダリングした場合

個別にレンダリングした場合の時間は以下。

$ time make 00
echo '{"name": "foo"}' | kamidana -i json hello.j2 --dst 00out/foo.hello
echo '{"name": "bar"}' | kamidana -i json hello.j2 --dst 00out/bar.hello
kamidana hello.j2 --data me.json --dst 00out/me.hello

real    0m0.727s
user    0m0.696s
sys     0m0.030s

この時のテンプレートは以下のようなもの。

hello {{name}}

まとめてレンダリングした場合

まとめてバッチモードでレンダリングした場合は以下の様な感じ。kamidanaではなくkamidana-batchコマンドを使う。 jinja2の読み込みなどに時間が掛かるのでやっぱり一回で終わらせたほうが早い。

$ time make 01
kamidana-batch 01batch.json --outdir=01out
INFO:kamidana.driver:out: 01out/foo.hello
INFO:kamidana.driver:out: 01out/bar.hello
INFO:kamidana.driver:out: 01out/me.hello

real    0m0.250s
user    0m0.233s
sys     0m0.017s

この時渡したファイルは以下のようなもの。

01batch.json

[
  {"template": "./hello.j2", "data": {"name": "foo"}, "outfile": "foo.hello"},
  {"template": "./hello.j2", "data": [{"name": "bar"}], "outfile": "bar.hello"},
  {"template": "./hello.j2", "data": "me.json", "outfile": "me.hello"}
]

以下のフィールドは必須

  • template
  • outfile

makefile

作業を行った時のmakefile

default:
  $(MAKE) 00
  $(MAKE) 01
  diff -ur 00out 01out

# onefile
00:
  echo '{"name": "foo"}' | kamidana -i json hello.j2 --dst 00out/foo.hello
  echo '{"name": "bar"}' | kamidana -i json hello.j2 --dst 00out/bar.hello
  kamidana hello.j2 --data me.json --dst 00out/me.hello

# batch
01:
  kamidana-batch 01batch.json --outdir=01out

clean:
  rm -rf 00out 01out