Luigi - 平行分支

Luigi - parallel branches

我是 Luigi 的新手,我已经遇到了似乎无法解决的问题。

所以假设我想要这样的东西:

所以基本上我的问题是:如何为我想要的多个实例多次调用一个任务,甚至继续以相同的方式向每个 "branch".

添加其他任务

我知道它应该与 requires() 函数一起使用,例如通过 return [list of Task for x in range(10)] 或类似的东西。但是我找不到正确的语法/方法。

希望有人能帮助我,我将不胜感激!!

提前致以最诚挚的问候和感谢

任务的唯一性由输出路径决定。如果输出路径相同,则任务相同。因此,您可以做的是使用不同的输出路径创建相同 class 的多个实例。

在 Luigi 中执行此操作的推荐方法是向您的任务添加一个参数 class 并在构建输出路径时使用此参数。

例如,

class TaskA(luigi.Task):
    number = luigi.IntParameter()
    
    def output():
        base_path = 'path/to/a/dir' 
        file_name = '%5.5d.txt' % self.number
        return LocalTarget(os.path.join(base_path, file_name)) 

现在您可以通过以下方式在另一个任务中多次调用此任务:

class TaskB(luigi.Task):
    
    def requires():
        return [TaskA(i) for i in range(n)] 

请注意,您第二次 运行 TaskB 它对 TaskA 1 到 n 的要求已经满足。如果你总是想再次执行 TaskA 你应该在它的输出路径中添加一些随机性。