如果每次任务要求发生变化,如何运行管道?

时间:2019-01-04 10:30:48

标签: python luigi

我有一条管道:F-> M->S。其中F,M和S是任务。我将Luigi称为任务S。和M需要F。但是有时候,M需要D,其他时候需要B。F,D和B是不同的,没什么不同,但是M可以使用所有这些任务的输出。今天我们有了3个选择,但是随着时间的推移这个数字会增加。每次将新任务作为选项添加到管道时,我是否都应该更改所有任务(例如,我们现在有任务E的代码,有时M会要求它,而其他时候则不需要),或者可以我将任务作为参数传递(如何?)?

1 个答案:

答案 0 :(得分:0)

您想要的可能是luigi中的Dynamic Dependency。我会有这样的东西

class M(luigi.Task):
  def requires(self):
        # keep empty() or add any dependency which are not dynamically required

  def run(self):
      # Collect condition for each of the dynamic dependencies
      if(condition_for_task_F):
          s=yield TaskF()
      elif....
      else:
          s= yield TaskE()

并回答您的问题,是否可以将Task作为参数传递。 this可能是答案。但这绝对是禁止的,因为它违反了幂等原则。这是不好的编程。更好的方法是将依赖逻辑与这样的另一个任务分离。

 F,D,B,E -> Y -> M -> S 

其中Y只是计算依赖关系并将其推入M。