検索 K
社内の開発アシスタントが、Pythonのスタートアップ高速化に関する調査を行ないました。 そこから得た知見を、外部に共有したいと思います。
スクリプトのスタートアップ時間が長いときは、 import に時間がかかっている 場合があります。 そのような場合はまず、 Python 3.7 以降 で利用できる -X importtime オプションを使ってどのimportが時間を消費しているのか調べると良いです。
使用例
python -X importtime your/script.py上記のようにpythonを実行すると、以下のようなログが表示されます。
import time: self [us] | cumulative | imported package
...
import time: 86500 | 179327 | pkg_resources
...
import time: 385 | 236655 | IPython
import time: 22 | 236677 | IPython.core
import time: 26 | 236703 | IPython.core.magic
import time: 978 | 237680 | dotenv.ipython
import time: 199 | 239032 | dotenv
...
...
import time: 3246 | 578972 | pipenv.cli
import time: 507 | 579479 | pipenvさらにかっこよく可視化するには
tuna というソフトウェアで、importの時間を可視化できます。 以下のようにして、インストールと利用が可能です。
pip install tuna
python -X importtime your/script.py 2> a.log && tuna a.logtunaを実行すると、以下のような画面が描画されます。

- ● import全体にかかっている処理時間が0.179秒
- ● 内訳は以下の通り
- – awscli.clidriverのimportに0.113秒
- – awscli.handlersのimportに0.051秒
- – …
これにより、import処理のうちどこで時間がかかっているかを分析し、対処することができるようになります。
解決した例
弊社の従業員が開発している annofab-cli というツールがあります。これは、弊社が開発している AnnoFab への「タスクの一括差し戻し」や、「プロジェクト間の差分表示」など、AnnoFabの画面で実施するには時間がかかる操作を、コマンドとして提供しているものです。
このツールの開発で、ヘルプコマンドが出力されるまでの時間を短くしたいというIssueがありました。 このIssueの解決のため、弊社の開発アシスタントがPythonのスタートアップ高速化に関する調査と対応を行ないました。
調査の結果、annofabcli.statistics.histogramモジュールのimportに時間がかかっていることがわかりました。
結果、以下のようにしてヘルプ表示までの時間を半分にすることができました。
- ● 変更前: 該当するPythonスクリプトの先頭でfrom annofabcli.statistics.histogram import Histogram していた
- ● 変更後: Histogramを使いたい箇所で、importlibを使って annofabcli.statistics.histogramを遅延ロードする

弊社の開発アシスタント職では、このように社内の問題ごとや困りごとの調査・解決を行ないます。 興味を持たれた方は、ぜひ採用ページをご覧ください。よろしくお願いいたします。
