Luigi 处理具有多个依赖任务的缺失任务

Luigi dealing with missing tasks with mutiple dependency tasks

假设我在 5 个不同时期有大约 5 个任务,每个任务输出一个 excel 文件。然后我需要将这 5 个输出文件合并到一个新任务中,但其中一个任务尚未完成,但我仍然希望将这 4 个文件的其余部分合并到一个文件中。有没有办法在 Luigi 中做到这一点。 这是一些可能有助于理解问题的示例代码

class MakeFile():
    period = luigi.Parameter()
    def run(self):
        return cleaned_file

class MergeFiles():
    def requires(self):
        periods = #mutiple periods
        for period in periods:
            yield MakeFile(period)

    def run(self):
        #merge files here

做你想做的事,你可以不写任何东西到你的output。基本上,如果任务的 output 方法 return 编辑的所有内容都存在,Luigi 会检查任务是否已完成。因此,您可以只打开和关闭 excel 文件而不写入任何内容,然后测试它们在 MergeFiles 中是否为空。

除此之外,您在当前 类 中犯了几个错误。

  1. MakeFile 中,您没有 return 来自 run 的任何内容。您需要创建一个 output 方法和 return 个目标。有关详细信息,请参阅 https://luigi.readthedocs.io/en/stable/tasks.html#task-output

  2. MergeFilesrequires方法中,你没有在requires方法中yieldyield 函数在您 运行 执行一项任务并需要动态要求其他任务时使用。如果这确实是您所需要的,您可以在这里阅读更多内容:https://luigi.readthedocs.io/en/stable/tasks.html#dynamic-dependencies。我认为您应该在 requires 中使用 return [MakeFile(period) for period in periods]。然后您可以使用 self.input().

  3. 在 运行 中访问它们