Краткая версия:
Есть ли в Python планировщик задач, который может делать то, что делает gmake? В частности, мне нужен планировщик задач, рекурсивно разрешающий зависимости. Я посмотрел на Луиджи, но, похоже, он разрешил только прямые зависимости.
Полная версия:
Я пытаюсь создать рабочий процесс, который обрабатывает множество файлов данных в заранее определенном порядке, более поздние задачи могут напрямую зависеть от результатов некоторых более ранних задач, но, в свою очередь, правильность этих результатов зависит от еще более ранних задач. .
Например, давайте рассмотрим карту зависимостей, подобную следующей:
A <- B <- C
Когда я запрашиваю результат из задачи C, Луиджи автоматически планирует B, а затем, поскольку B зависит от A, он будет планировать A. Таким образом, окончательный порядок выполнения будет [A, B, C]. Каждая задача будет создавать официальный выходной файл как признак успешного выполнения. Это нормально для первого запуска.
Теперь предположим, что я ошибся во входных данных для задачи A. По-видимому, мне нужно заново запустить всю цепочку. Однако просто удалить выходной файл из A не получится. Потому что Луиджи видит выходные данные B и C и приходит к выводу, что требование для задачи C выполнено и запусков не требуется. Мне нужно удалить выходные файлы из ВСЕХ задач, которые зависят от A, чтобы они были запущены снова. В простом случае мне нужно удалить все выходные файлы из A, B и C, чтобы Луиджи обнаружил изменение, внесенное в A.
Это очень неудобная функция. Если у меня есть десятки или сотни задач, которые имеют довольно сложные зависимости друг от друга, будет действительно сложно сказать, какие из них будут затронуты, когда одну из задач нужно будет повторно запустить. Для планировщика задач, обладающего способностью разрешать зависимости, я ожидаю, что Луиджи сможет действовать аналогично GNU-Make, где зависимости проверяются рекурсивно, а конечная цель будет перестроена при изменении одного из самых глубоких исходных файлов.
Мне было интересно, может ли кто-нибудь дать несколько предложений по этому вопросу. Мне не хватает некоторых ключевых функций в Luigi? Существуют ли другие планировщики задач, действующие как gmake? Меня особенно интересуют пакеты на основе Python, и я бы предпочел, чтобы они поддерживали Windows.
Большое спасибо!