(PECL gearman >= 0.5.0)
GearmanClient::addTaskStatus — 添加一个任务以获取状态
用于向 Gearman 服务器请求状态信息,这将调用指定的 status 回调(使用 GearmanClient::setStatusCallback() 设置)。
job_handle
要获取状态的任务的 job handle
context
要传递给 status 回调的数据,通常是对数组或对象的引用
一个 GearmanTask 对象,如果失败则返回 false
。
示例 #1 监控多个后台任务的完成
在这个例子中,在 worker 中引入了人工延迟来模拟长时间运行的进程。对于这个例子,只有一个 worker 运行。
<?php
/* 创建我们的对象 */
$gmclient= new GearmanClient();
/* 添加默认服务器 */
$gmclient->addServer();
/* 启动一些后台任务并保存 handle */
$handles = array();
$handles[0] = $gmclient->doBackground("reverse", "Hello World!");
$handles[1] = $gmclient->doBackground("reverse", "!dlroW olleH");
$gmclient->setStatusCallback("reverse_status");
/* 轮询服务器以查看这些后台任务何时完成; */
/* 更好的方法是使用事件回调 */
do
{
/* 使用 context 变量来跟踪已完成的任务数量 */
$done = 0;
$gmclient->addTaskStatus($handles[0], &$done);
$gmclient->addTaskStatus($handles[1], &$done);
$gmclient->runTasks();
echo "Done: $done\n";
sleep(1);
}
while ($done != 2);
function reverse_status($task, $done)
{
if (!$task->isKnown())
$done++;
}
?>
上面的例子将输出类似于以下内容
Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 0 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 1 Done: 2