运行taskA并使用参数运行下一个任务,这些参数返回luigi

时间:2018-01-24 08:44:14

标签: python pipeline luigi

我有任务,它会生成应处理的文件:

class TaskA(luigi.Task):
    def run(self):
        # some code which generates list of files into output()
    def output(self):
        return luigi.LocalTarget(filepath='/path/to/process_these_files.json')

我有包装任务,应该运行TaskA,获取参数,并运行带有值的处理任务,我将其放入process_these_files.json

class RunAll(luigi.WrapperTask):
    def requires(self):
        files = json.load(TaskA().open('r'))
        for file in files:
            yield ProcessFileTask(file=file)

任何想法怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用动态依赖项。这些是在运行时知道的依赖项。每次yield动态依赖时,run()方法将一直持有,直到依赖完成。

例如:

class RunAll(luigi.WrapperTask): 
    def requires(self): 
        return TaskA() 

    def run(self):
        files = json.load(self.input().open('r')) 
        for file in files: 
            yield ProcessFileTask(file=file)

另见https://luigi.readthedocs.io/en/stable/tasks.html#dynamic-dependencies