0

我进入 Luigi 框架开发,我想在一个类中执行 2 个作业(两者都是管道作业),但是当 Job1 完全执行时,Job2 必须只运行。

class ExecuteTwoJobs(luigi.Task):
    def requires(self):
        reqs = []
        reqs.append(Job1(*args, **kwargs))
        reqs.append(Job2(*args, **kwargs))
        return reqs

    def output(self):
        //statements

    def run(self):
        //statements

有什么办法可以执行job1,一旦完成,就去执行Job2。

任何帮助深表感谢

4

2 回答 2

1

在一般情况下,建议使用@matagus 的答案,但如果由于某种特殊原因无法Job1要求,则可以使用如下动态依赖项。Job2

class ExecuteTwoJobs(luigi.ExternalTask):

    def output(self):
        //statements

    def run(self):
        yield Job1(*args, **kwargs)
        yield Job2(*args, **kwargs)

该任务执行Job1时,未完成则执行,Job2之后运行。但是,我们可以从 DAG 工作流管理中获得较少的好处。

于 2017-04-19T16:52:43.247 回答
1

这样做的方法是运行 Job2,即 Job2 所需的 Job1。

class Job2(luigi.Task):

    def requires(self):
        yield Job1(*args, **kwargs))

    def output(self):
        //statements

    def run(self):
        //statements

然后你以这种方式运行 Job2:

luigi --module <your_module> Job2 <tasks params>

luigi会先运行Job1,完成后会运行Job2。

于 2017-04-05T20:48:07.150 回答