PHP Gearman Task иногда возвращает пустой объект - PullRequest
3 голосов
/ 13 января 2012

У меня есть простой клиент Gearman и рабочий. Я использую оба на своем рабочем столе Ubuntu. Я установил пакет gearman-beta pecl и версию Gearman от synaptic.

Моя проблема в том, что иногда Я получаю пустой объект от рабочего. Примерно в 50% случаев отображается ожидаемый текст, в остальное время отображается «Объект GearmanTask». ( ) "(из моего print_r в клиенте)

Ни в коем случае не происходит исключение, клиент всегда думает, что работник успешно завершил. Следует также отметить, что таймаутов нет, клиентский скрипт выполняется быстро.

Клиент

<code>$gmclient = new GearmanClient();
$gmclient->addServer();

$gmclient->addTask('test','just some text');
$gmclient->setCompleteCallback("complete");
$gmclient->setFailCallback('fail');
$gmclient->runTasks(); 

function fail() {
  echo "FAIL";
}
function complete($task) { 
  print "COMPLETE: " . $task->data() . "<br />";
  if($task->data() == '') {
     echo '<pre>'.print_r($task, true).'

'; echo $ task-> error (); } }

Рабочий (test.php)

$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("test", "test_function");
while (true) {
  $worker->work();
  print $worker->returnCode();
}
function test_function($job) {
  return $job->workload() . ' worked!';
}

У меня нет ничего в /var/log/gearman-job-server.

Мысли

1 Ответ

0 голосов
/ 10 марта 2014

Это может показаться странным, но мне помогло следующее.

Вам следует заменить следующий блок

$gmclient = new GearmanClient();
$gmclient->addServer();

$gmclient->addTask('test','just some text');
$gmclient->setCompleteCallback("complete");
$gmclient->setFailCallback('fail');
$gmclient->runTasks();

с этим

$gmclient = new GearmanClient();
$gmclient->addServer();

$gmclient->setCompleteCallback("complete");
$gmclient->setFailCallback('fail');

$gmclient->addTask('test','just some text');
$gmclient->runTasks(); 
...