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

Python 如果每次任务的需求发生变化,如何运行管道?,python,luigi,Python,Luigi,我有一个管道:F->M->S。其中F、M和S是任务。我用任务S调用luigi。任务S需要M;而M需要F。但有时,M需要D,其他时间需要B。F,D和B是不同的,没有什么相似之处,但所有这些任务的输出都可以被M使用。今天我们有3个选项,但随着时间的推移,这个数字会增加。每次将新任务作为选项添加到管道中时,我是否应该更改所有任务(例如,我们现在有任务E的代码,这有时是M所需要的,而其他时候则不会),或者我是否可以将任务作为参数传递(如何?)呢?您想要的可能在luigi中。我想要这样的 class M(

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

您想要的可能在luigi中。我想要这样的

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()
并回答您是否可以将任务作为参数传递的问题。答案是可能的。但这是绝对禁止的,因为它违反了幂等原则。这是糟糕的编程。更好的方法是将依赖关系逻辑与类似的另一个任务解耦

 F,D,B,E -> Y -> M -> S 
其中Y只计算依赖项并将它们推送到M