2017-04-04 15 views
0

私はLuigiフレームワークの開発に入っていますが、私は2つのジョブ(両方ともパイプラインジョブです)を1つのクラスで実行したいのですが、 Job1が完全​​に実行されたときのみ実行する必要があります。Luigi - 2パイプラインジョブを実行中(SYNC、パラレルではない)

class ExecuteTwoJobs(luigi.Task): 
    def requires(self): 
     reqs = [] 
     reqs.append(Job1(*args, **kwargs)) 
     reqs.append(Job2(*args, **kwargs)) 
     return reqs 

    def output(self): 
     //statements 

    def run(self): 
     //statements 

私はjob1を実行する方法はありますか?完了したら、Job2を実行してください。

すべてのヘルプは非常に

答えて

1

にそれを行うための方法を高く評価しているJOB2で必要とされるジョブ1であること、JOB2を実行しています。

class Job2(luigi.Task): 

    def requires(self): 
     yield Job1(*args, **kwargs)) 

    def output(self): 
     //statements 

    def run(self): 
     //statements 

その後、JOB2をこのように実行します。

luigi --module <your_module> Job2 <tasks params> 

とルイージは、最初のジョブ1を実行し、それが完了した後、それはJOB2を実行します。

+0

ソリューションを提供してくれてありがとうございます。私は実際にあなたのやり方でそれをやらなければなりません。しかし、私が望んでいたのは、それらを1つのクラスで実行することでした。 Job1とJob2の両方が必要です。この場合、Job3が実行されると、Job1とJob2がパイプライン化されます。 方法はありますか.Job2を開始する前でもJob1を実行できるようにすることができます。 ありがとうございます。 –

+0

@TalatParwez私はあなたがルイージの仕組みを理解していないと思います。私はあなたを理解できません。私が解決策として投稿したタスクを実行する方法は 'luigi --module your_module Job2 'です:そのようにLuigiはJob1がalredyを実行したかどうかをチェックし、そうでなければ実行します。 Job1が完了すると、Job2が実行されます。 LuigiにJob1(コマンドラインから)を実行するように言わなかったことに気付いただけで、Job2を実行するように要求しました。 – matagus

1

通常、@matagusの回答が推奨されますが、Job2で必要とされるものがJob1にならない場合は、dynamic dependencyを以下のように使用することができます。このタスクが実行される

class ExecuteTwoJobs(luigi.ExternalTask): 

    def output(self): 
     //statements 

    def run(self): 
     yield Job1(*args, **kwargs) 
     yield Job2(*args, **kwargs) 

、完了していない場合Job1が実行され、そしてJob2は、その後に実行されます。ただし、DAGワークフロー管理のメリットは少なくなります。

関連する問題