LoginSignup
7
10

More than 5 years have passed since last update.

luigiのon-memoryでのデータ受け渡しの非効率さについて

Posted at

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とはいえ、こんなに遅いとは思っていませんでした。本家の説明にあるように、テストをする用の仕組み、って感じですね。

というわけで、普段使いの時にはガンガンファイルを書き出しちゃいましょう。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10