我有一个Gearman服务器运行一个过程需要几分钟才能完成。我正在运行一个进度条来显示完成,并且我正在尝试使用Gearman PHP扩展和jobStatus()函数来获取条形图的百分比。
这个工作肯定是活跃的,因为前两个字段(已知+仍在运行)返回true。但是,第三和第四个字段(完成百分比的分子和分母)没有返回。有谁知道为什么会这样或者如何计算这些数字?
答案 0 :(得分:3)
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;
}
答案 1 :(得分:0)
工作人员是否已配置为返回状态?
如果你自己编写,你必须做一些额外的工作,让他们回过头来回复细节。