具有复杂依赖关系的任务调度

时间:2011-07-26 19:22:17

标签: php workflow scheduling gearman job-scheduling

我正在寻找一种方法来安排任务在几个先前的任务完成后开始的任务。

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

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

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

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

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

2 个答案:

答案 0 :(得分:7)

  

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

为什么不让工人X启动子工作者A,B和C并在继续之前等待他们完成?您可以同时拥有一个兼顾Gearman工作者和客户端的进程X.

答案 1 :(得分:0)

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

  • B或C
  • 95%完成或10分钟过去

起初我认为你的过程只是异步的。在这种情况下,您可以使用称为延迟和承诺的东西。在处理数据的ajax调用时,我在JavaScript中使用了很多。有了这个,你基本上就是配置一个依赖图。

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

这就是非常类似PHP的东西。 PHP具有非常差的cron作业支持,不支持异步任务,也没有定时器。你为什么用PHP做这个?

相关问题