Как правильно настроить повтор задачи Луиджи?

Я пытаюсь настроить механизм повтора Луиджи так, чтобы неудачные задачи повторялись несколько раз. Однако, хотя задача повторяется успешно, Луиджи завершает свою работу безуспешно:

===== Luigi Execution Summary =====

Scheduled 3 tasks of which:
* 2 ran successfully:
    - 1 FailOnceThenSucceed(path=/tmp/job-id-18.subtask)
    - 1 MasterTask(path=/tmp/job-id-18)
* 1 failed:
    - 1 FailOnceThenSucceed(path=/tmp/job-id-18.subtask)

This progress looks :( because there were failed tasks

Итак, возникает вопрос: как мне настроить Луиджи (я установил версию 2.3.3 с помощью pip install), чтобы, если задача не удалась один раз, но затем была успешно повторена, то Луиджи успешно завершил работу с This progress looks :) вместо сбоя с This progress looks :(?

Вот минимальная конфигурация планировщика и рабочего, которую я придумал, а также задачи для демонстрации поведения:

[scheduler]
retry_count = 3
retry-delay = 1

[worker]
keep_alive=true

mytasks.py:

import luigi


class FailOnceThenSucceed(luigi.Task):
    path = luigi.Parameter()

    def output(self):
        return luigi.LocalTarget(self.path)

    def run(self):
        failmarker = luigi.LocalTarget(self.path + ".hasfailedonce")
        if failmarker.exists():
            with self.output().open('w') as target:
                target.write('OK')
        else:
            with failmarker.open('w') as marker:
                marker.write('Failed')
            raise RuntimeError("Failed once")


class MasterTask(luigi.Task):
    path = luigi.Parameter()

    def requires(self):
        return FailOnceThenSucceed(path=self.path + '.subtask')

    def output(self):
        return luigi.LocalTarget(self.path)

    def run(self):
        with self.output().open('w') as target:
            target.write('OK')

Пример исполнения:

PYTHONPATH=. luigi --module mytasks MasterTask --workers=2 --path='/tmp/job-id-18'


person Jakabov    schedule 24.10.2016    source источник


Ответы (1)


Это старая проблема Луиджи - успешные повторные задачи не помечались как таковые в случае сбоя, а затем успешно выполнялись при повторной попытке: https://github.com/spotify/luigi/issues/1932

Это было исправлено в версии 2.7.2: https://github.com/spotify/luigi/releases/tag/2.7.2

Я предлагаю вам перейти на последнюю версию Luigi, то есть запустить pip install -U luigi.

person Tom    schedule 19.02.2018