LoginSignup
0
1

More than 5 years have passed since last update.

Luigiにおけるアンチパターン

Last updated at Posted at 2017-02-02

Luigiの流儀に沿わず、コードを書いてしまい、何度も書き直したため、アンチパターンをこちらにまとめておきます。

Luigiを扱う上での注意点については、下記の記事にまとめてあります。
Luigiを扱う上での注意点

並列タスク後の直列によるタスクへの依存

本来作りたいもの

並列で処理回して、最後に必ずやりたい後続処理(TaskC)を実施して終了

出来あがるもの

TaskBが一個でも失敗したらTaskCが動かない処理

from Luigi import Task, LocalTarget
from luigi.format import UTF8

class MyTask(Task):
  def output(self):
    return LocalTarget("MyTaskOut.txt", format=UTF8)

  def run(self):
    with self.input() as fin:
      yield [TaskB(data) for data in fin]

    yield TaskC() # 絶対やらなきゃいけない処理

    with self.output().open('w') as fout:
      fout.write('終わったよー')

出力ターゲットを指定しているが、ファイルを作らない処理

本来作りたいもの

成功した際に結果をファイルの出力して終了するタスク

出来上がるもの

永遠に終わらないタスク

from Luigi import Task, LocalTarget
from luigi.format import UTF8

class MyTask(Task):
  def output(self):
    return LocalTarget("MyTaskOut.txt", format=UTF8)

  def run(self):
    if なんかやばい処理:
      with self.output().open('w') as fout:
        fout.write('成功した!やったね!')
    # 失敗した時はほっておこう

タスクを失敗させるため何か例外を起こさないとだめ。

0
1
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
0
1