齿轮工任务 - 如何检测何时完成所有任务



代码:

$gmc = new GearmanClient();
$gmc->addServer();
$gmc->setCompleteCallback(function(GearmanTask $task){
    echo 'Complete: Task ' . $task->unique() . PHP_EOL;
});
for ($i=0; $i<10; $i++) {
    $gmc->addTask('queryShard', json_encode($taskData), null, 'Job:' . $i);
}
if (!$gmc->runTasks()) {
    echo "ERROR " . $gmc->error() . "n";
}

我可以看到每个触发的任务何时完成。但是,有没有办法在所有启动的任务都成功时触发事件(请不要提供依赖于手动任务注册表的解决方案(?

另外,任何人都可以就如何将一组任务作为一组任务进行管理提供建议吗?

谢谢!

runTasks 将阻止调用线程的执行,直到所有添加的前台任务完成。查看 fiskfisk 答案了解更多详情。但是,所有任务都已完成的事实并不意味着所有任务都成功完成。

Gearman应用程序框架故意不对任务的(不(成功竞争做出假设。有许多 Gearman 客户端实现和无限数量的用例。开发人员有责任为所讨论的用例提供最合适的解决方案。

最常见的是,我会使用 SplObjectStorage 类以及实现创建、失败、警告、异常和完整回调来跟踪客户端的任务完成情况。可能存在复杂的用例,可能需要对工作人员进行额外的跟踪。

您可以使用

以下内容:

$taskset = $gmc->new_task_set();
while(...) {
    $taskset->addTask(...);
}
$taskset->wait();

等到所有作业完成。

相关内容

  • 没有找到相关文章

最新更新