Ruby
Python

pyenv, rbenv の shims のオーバーヘッド

More than 1 year has passed since last update.

Rubyist が pyenv を使うときに知っておいてほしいこと で、 「pyenv を Python をビルドするためだけに利用する方法」について紹介しました。

そこで「シェルを軽量化し、 shims も利用しないようにする事ができます。」と書いたのですが、具体的にコマンドを shims 経由で起動するオーバーヘッドについて紹介しておきます。

$ type python3

python3 は /Users/inada-n/pyenv/shims/python3 です

$ pyenv shell 3.6.1
$ python3 -VV
Python 3.6.1 (default, May 18 2017, 16:23:51)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]

$ time python3 -S -c 42

real 0m0.099s
user 0m0.043s
sys 0m0.048s

$ time python3 -S -c 42

real 0m0.105s
user 0m0.044s
sys 0m0.051s

$ export PATH=$PYENV_ROOT/versions/3.6.1/bin:$PATH
$ python3 -VV
Python 3.6.1 (default, May 18 2017, 16:23:51)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]

$ time python3 -S -c 42

real 0m0.023s
user 0m0.013s
sys 0m0.010s

$ time python3 -S -c 42

real 0m0.025s
user 0m0.014s
sys 0m0.010s

mac での python 自体の起動速度は 20ms 強 (Linuxだともっと早いのですが…) ですが、 shims を通すだけで 100ms 強に遅くなります。

この違いが気になるか気にならないかは人によると思いますが、気になる人は pyenv を使うときに shims を使わない運用を試してみるといいと思います。