代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

如何定义输出/完成inluigi.contrib.external_程序.ExternalProgramTask

  •  0
  • CIsForCookies  · 技术社区  · 7 年前

    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 在visualizer中完成正常,并且BTask正在输出成功运行的预期值),但是这种依赖性在某种程度上是混乱的。

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

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

    , ,因为我无法覆盖 run 在这些任务中(因为他们 ExternalProgramTask 子类),我不能创建那个文件(目标)。我怎样才能让BTask明白 Atask 完成了没问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bernhard Hering    7 年前

    在ATask中,添加一个complete()函数,该函数检查ATask是否已完成ok(通过返回True)或尚未完成ok(通过返回False)以及多个检查