luigiでパラメータチューニングのコメントにて「on-memoryの受け渡しは luigi.mock でできそう」という情報を頂戴いたしまして、それを実際にやってみたよの話。
ただまあ、mockって名前からしてファイルI/Oを疑似的にon-memoryでやっているようで、そんなに効率は良くないだろうなあとは思っています。いました。
##on-memoryでのデータ受け渡しコード
今回利用したコードは以下。
https://github.com/keisuke-yanagisawa/study/blob/20151208/luigi/mock_test.py
python mock_test.py main --usemock
でmock利用バージョンを、
python mock_test.py main
でmock不使用バージョンを走らせることができます。
見ればわかるかと思いますが、"1"が10000000個、カンマ区切りで並んだcsvを作成し、それを読み込み、文字数をカウントするコードになっていまして、最終的な出力は19999999になります。
配列を作成する時間もあるのですが、まあ大体こんなんでええやろ精神です。実際、これで以下の時間計測で差がでましたし。
##時間計測結果
さくさくっと結果を示します。今回は、timeコマンドを利用して3回時間を計測してみました。
luigi.LocalTarget | luigi.mock.MockTarget | |
---|---|---|
1回目 | 10.952 sec. | 29.879 sec. |
2回目 | 7.829 sec. | 30.883 sec. |
3回目 | 11.137 sec. | 27.766 sec. |
はい、異論はないですね。
mockとはいえ、こんなに遅いとは思っていませんでした。本家の説明にあるように、テストをする用の仕組み、って感じですね。
というわけで、普段使いの時にはガンガンファイルを書き出しちゃいましょう。