我有一個Gearman服務器正在運行一個需要幾分鐘才能完成的進程。我正在運行一個進度條來顯示完成情況,並試圖使用Gearman PHP擴展和jobStatus()函數來獲取酒吧的百分比。Gearman作業狀態存在的問題
該作業絕對是主動的,因爲前兩個字段(已知的+仍在運行)返回true。然而,第三和第四個字段(完成百分比的分子和分母)沒有任何結果。有人知道爲什麼這可能是或如何計算這些數字?
我有一個Gearman服務器正在運行一個需要幾分鐘才能完成的進程。我正在運行一個進度條來顯示完成情況,並試圖使用Gearman PHP擴展和jobStatus()函數來獲取酒吧的百分比。Gearman作業狀態存在的問題
該作業絕對是主動的,因爲前兩個字段(已知的+仍在運行)返回true。然而,第三和第四個字段(完成百分比的分子和分母)沒有任何結果。有人知道爲什麼這可能是或如何計算這些數字?
public bool GearmanJob::sendStatus (int $numerator , int $denominator)
將狀態信息發送給作業 服務器和任何監聽的客戶。使用 這指定已完成作業的百分比。
爲了能夠使用它,您可能還需要修改客戶端來處理通信。
例
client.php
<?php
global $argc,$argv;
if (!file_exists($argv[1])) {
echo "File not found\n";
exit(1);
}
$gmclient= new GearmanClient();
$gmclient->addServer();
do
{
$result = $gmclient->do("linecount", file_get_contents($argv[1]));
# Check for various return packets and errors.
switch($gmclient->returnCode())
{
case GEARMAN_WORK_STATUS:
list($numerator, $denominator)= $gmclient->doStatus();
echo "Status: " . sprintf("%d%%",($numerator/$denominator)*100)
. " complete\r";
break;
case GEARMAN_SUCCESS:
break;
}
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
echo "\nResult: $result\n";
worker.php
<?php
$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("linecount", "linecount");
while ($worker->work());
function linecount($job)
{
$lines = preg_split('/[\r\n]/',
$job->workload(),null,PREG_SPLIT_NO_EMPTY);
$linecount = count($lines);
$n = 0;
foreach ($lines as $line) {
usleep(3000);
$n++;
$job->sendStatus($n,$linecount);
$ret++;
}
return $ret;
}
工作人員是否配置爲返回狀態?
如果您自己編寫它們,您必須做一些額外的工作才能讓它們返回細節。
啊,感謝這麼多,不知道需要配置的工人。您可以指出哪些資源可以準確配置工作人員? – 2011-04-14 17:17:40
你自己寫了包嗎?當你收到一份工作時,你可以返回狀態:http://www.php.net/manual/en/gearmanjob.sendstatus.php – preinheimer 2011-04-14 17:39:42
這段代碼是否正常工作?我測試它沒有任何成功 – slier 2014-11-29 16:33:38
它曾經測試,並在2011年發現與gearmand 0.20一起工作的順序。現在,gearmand 1.2發佈了,這兩個版本之間很可能會對API進行更改。 – 2014-12-01 10:09:23
你設法獲得客戶端的狀態嗎?我的工作根本沒有工作..創業者api幾乎沒有改變..代碼工作就好了..我只是想知道我是否有不適當的安裝gearman – slier 2014-12-01 10:51:53