PHP Conference Japan 2024

GearmanClient::jobStatus

gearman_job_status

(PECL gearman >= 0.5.0)

GearmanClient::jobStatus -- gearman_job_status取得背景工作的狀態

描述

物件導向風格(方法)

public GearmanClient::jobStatus(string $job_handle): array

取得給定工作控制代碼的背景工作狀態。狀態資訊將指定工作是否已知、工作目前是否正在執行以及完成百分比。

參數

job_handle

Gearman 伺服器分配的工作控制代碼

回傳值

一個包含與提供的 job_handle 對應的工作狀態資訊的陣列。第一個陣列元素是一個布林值,指示工作是否已知,第二個是一個布林值,指示工作是否仍在執行,第三個和第四個元素分別對應完成百分比的分數的分子和分母。

範例

範例 #1 監控長時間執行的背景工作的狀態

<?php

/* 建立我們的物件 */
$gmclient= new GearmanClient();

/* 新增預設伺服器 */
$gmclient->addServer();

/* 執行反向用戶端 */
$job_handle = $gmclient->doBackground("reverse", "this is a test");

if (
$gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo
"錯誤的回傳碼\n";
exit;
}

$done = false;
do
{
sleep(3);
$stat = $gmclient->jobStatus($job_handle);
if (!
$stat[0]) // 工作是已知的,所以尚未完成
$done = true;
echo
"執行中: " . ($stat[1] ? "true" : "false") . ",分子: " . $stat[2] . ",分母: " . $stat[3] . "\n";
}
while(!
$done);

echo
"完成!\n";

?>

上面的範例將輸出類似以下的內容

Running: true, numerator: 3, denomintor: 14
Running: true, numerator: 6, denomintor: 14
Running: true, numerator: 9, denomintor: 14
Running: true, numerator: 12, denomintor: 14
Running: false, numerator: 0, denomintor: 0
done!

參見

新增註解

使用者貢獻的註解 2 個註解

15
bot at boxconnect dot org
9 年前
上面的範例讀取
if (!$stat[0]) // 工作是已知的,所以尚未完成

我認為註解是錯誤的,它應該讀作「工作是未知的,所以它已完成」。
祝您安好,
Jan
-2
richard@anon
7 年前
@Jan

if (!$stat[0]) // 工作是已知的,所以尚未完成

我相信是正確的。我的理解是,如果 $stat[0] 回傳任何非 false 的值,則工作目前正在執行,因此我們尚未完成。但是,如果我們找不到 $stat[0](即:工作控制代碼不再存在),則工作已完成。

--Richard
To Top