如何定义输出/完成inluigi.contrib.external_program.ExternalProgramTask

时间:2019-05-13 12:24:48

标签: python python-2.7 dependencies luigi

我有2个任务,每个任务都是inluigi.contrib.external_program.ExternalProgramTask的子类。

每个任务都在不同的目录上调用bash脚本,我想在它们之间添加依赖项:

class ATask(ExternalProgramTask):
    def program_args(self):
        return my_script_a.split()

class BTask(ExternalProgramTask):
    def requires(self):
        return ATask()

    def program_args(self):
        return my_script_b.split()

if __name__ == '__main__':
    luigi.build([BTask()], workers=2, local_scheduler=False)

错误是这样的:

File .../local/lib/python2.7/site-packages/luigi/worker.py", line 182, in run
    raise RuntimeError('Unfulfilled %s at run time: %s' % (deps, ', '.join(missing)))
RuntimeError: Unfulfilled dependency at run time: ATask__...

据我所知-每个任务本身都可以正常完成(我可以在可视化工具中看到ATask已经完成,并且BTask正在输出成功运行所期望的结果),但是依赖被弄乱了

根据我所看到的,我需要定义一个output方法,并确保目标将存在,例如添加:

def output(self):
    return luigi.LocalTarget('foo')

ATask,因为在这些任务中我无法覆盖run(因为它们是ExternalProgramTask子类),所以我无法创建该文件(目标)。如何使BTask了解Atask做得还行?

1 个答案:

答案 0 :(得分:0)

在ATask中,添加一个complete()函数来检查ATask是否已完成确定(通过返回True)或尚未完成确定(通过返回False)并进行多次检查