9

我正在寻找一种调度任务的方法,其中一旦完成了几个先前的任务,任务就会开始。

我有数百个“收集器”进程,它们从各种来源收集数据并将其转储到数据库中。一旦这些完成收集(从 1 秒到几分钟不等),我想立即启动一堆“数据处理”过程来分析和理解数据库中的数据。当所有这些都完成后,我希望开始一项最终任务并向我发送一封包含摘要数据的电子邮件。

我目前正在使用 Gearman 队列并在我期望“收集器”进程完成后启动计时器上的数据处理任务,但这意味着处理步骤在 10 分钟后开始,即使收集器进程在 3 后完成(或更糟糕的是,还没有完成)。

理想情况下,我可以指定特定规则,例如“在进程 A 和(B 或 C)完成时启动进程 X”,或“在 95% 的指定进程已完成或 10 分钟过去时启动进程 Y”。

需要自动创建流程和依赖项,因为它每次都会使用不同的参数运行(即,我每次都不会进行相同的计算)。

我可以自己使用队列和监视器编写某种图形依赖框架,但这似乎必须已经解决,我正在寻找任何使用过我描述的东西的人。

4

2 回答 2

7

“当进程 A 和(B 或 C)完成时启动进程 X”

为什么不让工人 X 启动子工人 A、B 和 C 并等待它们完成后再继续?您可以拥有一个进程 X,它同时是 Gearman 工作者和客户端。

于 2011-08-02T15:37:43.140 回答
0

你有一些非常特殊的条件:

  • B 或 C
  • 已完成 95% 或 10 分钟

起初我认为您的流程只是异步的。在这种情况下,您可以使用称为 deferreds 和 promises 的东西。在处理对数据的 ajax 调用时,我在 JavaScript 中经常使用它。有了这个,你基本上是在配置一个依赖图。

但是你的情况更复杂。显然你需要一个“或”,进度监控和计时器。

这都是非常不像 PHP 的东西。PHP 对 cron 作业的支持很差,不支持异步任务,也没有计时器。你为什么在 PHP 中这样做?

于 2011-07-29T21:30:22.763 回答