Luigi - 平行分支

时间:2018-02-07 18:05:17

标签: python parallel-processing luigi

我对Luigi完全不熟悉,而且我已经遇到了一个我无法解决的问题。

所以,让我说我想要这样的事情:

enter image description here 所以基本上我的问题是:如何为我想要的多个实例多次执行一个任务,甚至可以以相同的方式向每个"分支"添加其他任务。

我知道它应该适用于requires()功能,例如按return [list of Task for x in range(10)] 或类似的东西。但我无法找到正确的语法/方法。

我希望有人可以帮助我,我会非常感激!!

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

1 个答案:

答案 0 :(得分:0)

任务的唯一性由输出路径决定。如果输出路径相同,则青少年的任务是相同的。所以你可以做的是使同一个类的多个实例具有不同的输出路径。

在Luigi中执行此操作的建议方法是在任务类中添加一个参数,并在构造输出路径时使用此参数。

例如,

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时,其{1}}对1到n的要求已经满足。如果您总是想再次执行TaskA,则应在其输出路径中添加一些随机性。