我有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
做得还行?
答案 0 :(得分:0)
在ATask中,添加一个complete()函数来检查ATask是否已完成确定(通过返回True)或尚未完成确定(通过返回False)并进行多次检查