Планирование задач со сложными зависимостями - PullRequest
9 голосов
/ 26 июля 2011

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

У меня есть несколько сотен процессов "сборщика", которые собирают данные из различных источников и сбрасывают их вбаза данных.Как только они закончат сбор (где-то от 1 секунды до нескольких минут), я хочу немедленно запустить кучу процессов «обработки данных» для анализа и анализа данных в базе данных.Когда все это закончится, я хочу запустить заключительную задачу и отправить мне по электронной почте сводные данные.

В настоящее время я использую очередь Gearman и запускаю задачи обработки данных на таймерах, как только ожидаюПроцессы «сборщика» завершены, но это означает, что этап обработки начинается через 10 минут, даже если процессы сборщика завершены после 3 (или, что еще хуже, еще не завершены).

В идеале я мог быуказать конкретные правила, такие как «запуск процесса X после завершения процесса A и (B или C)» или «запуск процесса Y после завершения 95% указанных процессов или по истечении 10 минут».

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

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

Ответы [ 2 ]

7 голосов
/ 02 августа 2011

"запуск процесса X после завершения процессов A и (B или C)"

Почему бы не позволить работнику X запустить субработников A, B и C и дождаться их завершения, прежде чем продолжить?У вас может быть процесс X, который одновременно является работником Gearman и клиентом.

0 голосов
/ 30 июля 2011

У вас есть очень специфические условия:

  • B или C
  • 95% завершено или прошло 10 минут

Сначала я думал, что ваши процессы были просто асинхронными. В этом случае вы можете использовать то, что называется отложенными и обещаниями. Я часто использую это в JavaScript, когда имею дело с вызовами ajax для данных. При этом вы в основном настраиваете граф зависимостей.

Но ваше дело еще сложнее. Очевидно, вам нужны «или», мониторинг прогресса и таймеры.

Все это очень похоже на PHP. В PHP очень плохая поддержка заданий cron, нет поддержки асинхронных задач и нет таймеров. Почему вы делаете это в PHP?

...