2017-11-14 8 views
0

私はLuigiのパイプラインを開発しており、大きな問題に遭遇しています。同じパイプラインでタスクを再利用する方法はないようです。 は私が後だものを説明するために、次のワークフローを検討してください。 Luigiパイプラインの2つの異なる場所でタスクを再利用することは可能ですか?

Collect_Data → Clean_data → Task_on_data_A → Task_on_data_B ↳ Sample_data → Task_on_data_A → Task_on_data_B

は、私が Clean_dataSample_dataに同様の動作を行います。 DRYの原則に従いながら、私はルイージでこれをやりたい。今、私は文字通り、これを行うためにタスクAとBのコードをコピー&ペーストする必要があるようです。

気流がありますa way to deal with situations like this.ルイージはありますか?

答えて

1

私はあなたが矢印を他の方法に従属する矢印として描くべきだと思います。これは、実行パスがrequiresメソッドによって決定されるため、このように考えることができます。あなたのシナリオでは、それは条件付きの依存関係を持つTaskAを持っているので非常に簡単です。

あなたはちょうど2つのTaskBsに依存スタートとtaskbはサンプル上で実行するかどうかの指標に一つ以上のタスクを追加する必要が

擬似コード:

ParentTask 
    def requires(): 
    return [TaskB(sample_type=True), 
      TaskB(sample_type=False)] 

TaskB 
    def requires(): 
    return TaskA(sample_type) 

TaskA 
    def requires(): 
    if sample_type: 
     return SampleTask() 
    else: 
     return CleanTask() 

SampleTask 
    def requires(): 
    return CleanTask() 

CleanTask 
    def requires() 
    return CollectData() 
関連する問題