Luigiフレームワークに関して、ずっと誤解しており、非常に苦しんだため、もしかしたら同じ悩みで苦しむ人もいるかもしれないため、書き遺しておきます。
依存とは何なのか
誤解
- 依存先タスクの完了を待つ
実際
- 依存先タスクの完了は待つ
- 後続処理の続行には、依存先タスクの成功が必要
依存関係におけるタスクの成功と失敗とは
タスクの成功
output
で指定したターゲットへのファイル出力
タスクの失敗
タスク内における例外発生
この誤解が孕む問題
例えば、以下のようなケースを考えます。
input
で引き取ったリストに記載されている、1000行そこそこのURLのリストを読み取り、そのURLからファイルを引き取る処理。
ありがちな処理かと思いますが、ここに罠があります。
1000個、ファイルをダウンロードしてくるために直列処理はしたくないですし、input
で引き取ったデータを元にタスクにパラメータを与えたいため、動的依存として書くことになると思います。
仮に1000個作成されたタスクのうち、一つでもタスクが失敗すれば、後続処理は実施されません。
しかしながら、WEBサーバの不調や、URLの記載誤りによって、一個や二個、タスクが失敗するケースというのは往々にして考えられるわけで、それによって、後続の処理が停止してしまっては困る場合。
この場合、後続処理タスクとタスク生成をしているタスクに依存関係を張ってはならず、luigiの外で処理を書くべきであるという結論です。