(PECL gearman >= 0.5.0)
GearmanClient::addTaskStatus — 新增一個取得狀態的任務
用於向 Gearman 伺服器請求狀態資訊,伺服器會呼叫指定的狀態回呼函式(使用 GearmanClient::setStatusCallback() 設定)。
job_handle
要取得狀態的工作的作業 handle
context
要傳遞給狀態回呼函式的資料,通常是指向陣列或物件的參考
成功時回傳一個 GearmanTask 物件,失敗時回傳 false
。
範例 #1 監控多個背景工作的完成進度
此範例中的 worker 人為地加入了延遲,以模擬長時間執行的處理程序。在此範例中,只有一個 worker 正在執行。
<?php
/* 建立 GearmanClient 物件 */
$gmclient= new GearmanClient();
/* 加入預設伺服器 */
$gmclient->addServer();
/* 啟動一些背景作業並儲存其操作代碼 */
$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\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