PHP Gearman任务没有返回jobHandle

时间:2013-08-14 18:26:27

标签: php gearman

我们正在使用Gearman,当使用doLowBackground或doHigh等方法时,这些都会返回jobHandle,但是当我们执行tasks时,就没有jobHandle对象。我们得到GearmanTask对象,而不是获取jobHandle,我们得到string(0) ""

任何可能导致此问题的想法?

谢谢!

编辑:这是代码和其他信息:

// $client = \GearmanClient; // servers added, all that jazz
// $workload = 'string';

$arguments = array(
    'handleJob',
    $workload
);

$task = call_user_func_array(array($client, $method), $arguments);

if ($task instanceof GearmanTask) {
    $handles[] = $task->jobHandle();
}

$data = $client->runTasks();

任务正常运行但$handle正填充空字符串(每个任务添加一个)

编辑:这是我们得到的回复:

object(GearmanTask)#294 (0) {
}

我已经抛弃了每个PECL齿轮手对象,没有任何东西显示,这里是客户端,填充了服务器,选项等

object(GearmanClient)#291 (0) {
}

没有显示任何内容。

1 个答案:

答案 0 :(得分:5)

在收到任务并由Gearman作业服务器排队之前,作业句柄未分配给任务。

但是,您可以使用GearmanClient::setCreatedCallback()获取排队后的句柄。必须在添加和运行任务之前完成此操作:

$client = new \GearmanClient();
$client->addServer('127.0.0.1');
$handles = array();

$client->setCreatedCallback(function (\GearmanTask $task) use (&$handles) {
    $handles[] = $task->jobHandle();
});

$client->addTask('functionName', 'workload'); // ...
$client->runTasks();