GearmanClient::do

(PECL gearman >= 0.5.0)

GearmanClient::doExecuta uma única tarefa e retorna um resultado (descontinuado)

Descrição

public GearmanClient::do(string $function_name, string $workload, string $unique = ?): string

O método GearmanClient::do() foi descontinuado a partir do pecl/gearman 1.0.0. Use GearmanClient::doNormal().

Parâmetros

function_name

Uma função registrada que o trabalhador deve executar

workload

Dados serializados a serem processados

unique

Um identificador único usado para identificar uma tarefa específica

Valor Retornado

Uma string que representa os resultados da execução de uma tarefa.

Exemplos

Exemplo #1 Envio de tarefa simples com retorno imediato

<?php

# Código do cliente

echo "Começando\n";

# Cria nosso objeto cliente.
$gmclient= new GearmanClient();

# Adiciona servidor padrão (localhost).
$gmclient->addServer();

echo
"Enviando tarefa\n";

$result = $gmclient->doNormal("reverse", "Hello!");

echo
"Sucesso: $result\n";

?>
<?php

echo "Começando\n";

# Cria nosso objeto trabalhador.
$gmworker= new GearmanWorker();

# Adiciona servidor padrão (localhost).
$gmworker->addServer();

# Registra a função "reversa" com o servidor. Altera a função do trabalhador para
# "reverse_fn_fast" para um trabalhador mais rápido sem saída.
$gmworker->addFunction("reverse", "reverse_fn");

print
"Esperando tarefa...\n";
while(
$gmworker->work())
{
if (
$gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo
"Código de retorno:" . $gmworker->returnCode() . "\n";
break;
}
}

function
reverse_fn($job)
{
return
strrev($job->workload());
}

?>

O exemplo acima produzirá algo semelhante a:

Começando
Enviando tarefa
Sucesso: !olleH

Exemplo #2 Enviando um trabalho e recuperando status incremental

Um trabalho é enviado e o script faz um laço para recuperar informações de status. O trabalhador tem um atraso artificial que resulta em um trabalho de longa execução e envia status e dados conforme o processamento ocorre. Cada chamada subsequente a GearmanClient::do() produz informações de status na tarefa em execução.

<?php

# Código do cliente

# Cria nosso objeto cliente.
$gmclient= new GearmanClient();

# Adiciona servidor padrão (localhost).
$gmclient->addServer();

echo
"Enviando tarefa\n";

# Envia tarefa reversa
do
{
$result = $gmclient->doNormal("reverse", "Hello!");
# Verifica vários pacotes de retorno e erros.

switch($gmclient->returnCode())
{
case
GEARMAN_WORK_DATA:
echo
"Dados: $result\n";
break;
case
GEARMAN_WORK_STATUS:
list(
$numerator, $denominator)= $gmclient->doStatus();
echo
"Status: $numerator/$denominator concluído\n";
break;
case
GEARMAN_WORK_FAIL:
echo
"Falhou\n";
exit;
case
GEARMAN_Sucesso:
break;
default:
echo
"RET: " . $gmclient->returnCode() . "\n";
echo
"Error: " . $gmclient->error() . "\n";
echo
"Errno: " . $gmclient->getErrno() . "\n";
exit;
}
}
while(
$gmclient->returnCode() != GEARMAN_SUCCESS);

echo
"Sucesso: $result\n";

?>
<?php

# Código do trabalhador

echo "Começando\n";

# Cria nosso objeto trabalhador.
$gmworker= new GearmanWorker();

# Adiciona servidor padrão (localhost).
$gmworker->addServer();

# Registra a função "reversa" com o servidor.
$gmworker->addFunction("reverse", "reverse_fn");

print
"Esperando tarefa...\n";
while(
$gmworker->work())
{
if (
$gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo
"Código de retorno:" . $gmworker->returnCode() . "\n";
break;
}
}

function
reverse_fn($job)
{
echo
"Tarefa recebida: " . $job->handle() . "\n";

$workload = $job->workload();
$workload_size = $job->workloadSize();

echo
"Carga de trabalho: $workload ($workload_size)\n";

# Este laço de status não é necessário, apenas mostra como ele funciona
for ($x= 0; $x < $workload_size; $x++)
{
echo
"Status de envio: " + $x + 1 . "/$workload_size concluído\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}

$result= strrev($workload);
echo
"Resultado: $result\n";

# Retorna o que queremos enviar de volta ao cliente.
return $result;
}

?>

O exemplo acima produzirá algo semelhante a:

Worker output:

Começando
Esperando tarefa...
Tarefa recebida: H:foo.local:106
Carga de trabalho: Hello! (6)
1/6 concluído
2/6 concluído
3/6 concluído
4/6 concluído
5/6 concluído
6/6 concluído
Resultado: !olleH

Client output:

Começando
Enviando tarefa
Status: 1/6 concluído
Dados: H
Status: 2/6 concluído
Dados: e
Status: 3/6 concluído
Dados: l
Status: 4/6 concluído
Dados: l
Status: 5/6 concluído
Dados: o
Status: 6/6 concluído
Dados: !
Sucesso: !olleH

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
0
Shane Harter
14 years ago
Note that this isn't blocking -- that do() will return as soon as the job is accepted by the Gearman jobserver.

That lets you do..while until the return code is success or failure as you see in the examples.
To Top