PHP Gearman任务未返回jobHandle



我们使用Gearman,当使用doLowBackground或doHigh等方法时,这些方法都会返回一个jobHandle,但当我们执行任务时,没有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 gearman对象,没有任何显示,这是客户端,填充了服务器、选项等

object(GearmanClient)#291 (0) {
}

没有显示任何内容。

在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();

相关内容

  • 没有找到相关文章

最新更新