Python Framework для выполнения задач и обработки зависимостей - PullRequest
9 голосов
/ 12 марта 2012

Мне нужна структура, которая позволит мне сделать следующее:

  • Разрешить динамическое определение задач (я прочитаю внешний файл конфигурации и создам задачи / задания; например, задача = порождает внешнюю команду)

  • Предоставляет способ указания зависимостей от существующих задач (например, задача A будет запущена после завершения задачи B)

  • Уметь запускать задачи параллельно в нескольких процессах, если это позволяет порядок выполнения (т. Е. Нет взаимозависимостей задач)

  • Разрешить заданию зависеть от какого-то внешнего события (не знаю точно, как это описать, но некоторые задания заканчиваются, и через некоторое время они дают результаты, как фоновое запущенное задание; мне нужно указать некоторые задач, зависящих от этого события, выполненного в фоновом режиме)

  • Поддержка отмены / отката: если не удается выполнить одну задачу, попробуйте отменить все, что было выполнено ранее (я не ожидаю, что это будет реализовано в какой-либо среде, но, думаю, стоит спросить ..)

Так что, очевидно, это более или менее похоже на систему сборки, но я, похоже, не могу найти что-то, что позволило бы мне динамически создавать задачи, большинство вещей, которые, как мне кажется, уже определили их в "Makefile".

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 19 марта 2012

Я провел немного больше исследований и наткнулся на doit , который обеспечивает необходимую мне базовую функциональность без лишних усилий (не говоря уже о том, что Celery не решил бы эту работу, но это лучше для моего варианта использования).

1 голос
/ 03 февраля 2015

Другой вариант - использовать make.

  • Написать Makefile вручную или позволить скрипту Python написать его
  • использовать значимые промежуточные этапы выходного файла
  • Запустите make, которая должна вызвать процессы. Процессы будут представлять собой сценарий Python (сборка) с параметрами, которые сообщают ему, с какими файлами работать и какую задачу выполнять.
  • параллельное выполнение поддерживается с -j
  • также удаляет выходные файлы, если задачи не выполняются

Это позволяет обойти некоторые проблемы распараллеливания Python (GIL, сериализация). Очевидно, только на платформах * nix.

0 голосов
/ 12 марта 2012

AFAIK, в python нет такого фреймворка, который бы делал именно то, что вы описываете.Таким образом, ваши варианты включают либо создание чего-то самостоятельно, либо взломать некоторые биты ваших требований и смоделировать их с помощью существующего инструмента.Который пахнет как сельдерей .

  • У вас может быть задача celery, которая читает файл конфигурации, содержащий исходный код некоторых функций python, а затем использует eval или ast.literal_eval для их выполнения.

  • Celery предоставляет способ определения подзадач (зависимостей между задачами), поэтому, если вам известны ваши зависимости, вы можете смоделировать их соответствующим образом.

  • При условии, что вы знаетеВ порядке выполнения ваших задач вы можете направить их на любое количество рабочих машин.

  • Вы можете периодически опрашивать результат этого фонового задания, а затем запускать зависящие от него задачи.

  • Отмена / откат: это может быть сложно и зависит от того, что вы хотите отменить;Результаты?государство?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...