У меня есть 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
закончил нормально?