SunshinePHP Developer Conference 2015

GearmanClient::addTaskBackground

(PECL gearman >= 0.5.0)

GearmanClient::addTaskBackgroundAjoute une tâche d'arrière-plan pour une exécution en parallèle

Description

public GearmanTask GearmanClient::addTaskBackground ( string $function_name , string $workload [, mixed &$context [, string $unique ]] )

Ajoute une tâche d'arrière-plan pour une exécution en parallèle d'autres tâches. Appelez cette méthode pour toutes les tâches à exécuter en parallèle, puis, appelez la méthode GearmanClient::runTasks() pour réaliser les tâches.

Liste de paramètres

function_name

Une fonction enregistrée que le travailleur va exécuter

workload

Données linéarisées à analyser

context

Contexte de l'application à associer avec une tâche

unique

Un identifiant unique utilisé pour identifier une tâche particulière

Valeurs de retour

Un objet GearmanTask ou FALSE si la tâche n'a pu être ajoutée.

Exemples

Exemple #1 2 tâches dont une en arrière-plan

Cet exemple montre la différence entre l'exécution en arrière-plan et une exécution normale. Le client ajoute 2 tâches qui doivent exécuter la même fonction, mais une a été ajoutée avec la méthode addTaskBackground(). Une fonction de rappel est définie afin de surveiller la progression du travail. Un agent simple avec un délai artificiel rapporte la progression et le client la traite via la fonction de rappel. 2 agents sont exécutés dans cet exemple. Notez que la tâche en arrière-plan n'est pas affichée par le client.

<?php

# Le script client

# Crée un client Gearman
$gmc= new GearmanClient();

# Ajoute un serveur de travaux par défaut
$gmc->addServer();

# Définit 2 fonctions de rappel afin de surveiller la progression
$gmc->setCompleteCallback("reverse_complete");
$gmc->setStatusCallback("reverse_status");

# Ajoute une tâche pour la fonction "reverse"
$task$gmc->addTask("reverse""Hello World!"null"1");

# Ajoute une autre tâche, mais cette fois, en arrière-plan
$task$gmc->addTaskBackground("reverse""!dlroW olleH"null"2");

if (! 
$gmc->runTasks())
{
    echo 
"ERREUR " $gmc->error() . "\n";
    exit;
}

echo 
"FAIT\n";

function 
reverse_status($task)
{
    echo 
"STATUT : " $task->unique() . ", " $task->jobHandle() . " - " $task->taskNumerator() . 
         
"/" $task->taskDenominator() . "\n";
}

function 
reverse_complete($task)
{
    echo 
"TERMINÉ : " $task->unique() . ", " $task->data() . "\n";
}

?>
<?php

# Le script de l'agent

echo "Début\n";

# Crée un agent.
$gmworker= new GearmanWorker();

# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();

# Enregistre la fonction "reverse" sur ce serveur.
$gmworker->addFunction("reverse""reverse_fn");

print 
"Attente d'un travail...\n";
while(
$gmworker->work())
{
  if (
$gmworker->returnCode() != GEARMAN_SUCCESS)
  {
    echo 
"return_code: " $gmworker->returnCode() . "\n";
    break;
  }
}

function 
reverse_fn($job)
{
  echo 
"Travail reçu : " $job->handle() . "\n";

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

  echo 
"Charge de l'agent : $workload ($workload_size)\n";

  
# Cette boucle n'est pas nécessaire, mais permet de comprendre le fonctionnement
  
for ($x0$x $workload_size$x++)
  {
    echo 
"Envoi du statut : " . ($x 1) . "/$workload_size complete\n";
    
$job->sendStatus($x+1$workload_size);
    
$job->sendData(substr($workload$x1));
    
sleep(1);
  }

  
$resultstrrev($workload);
  echo 
"Résultat : $result\n";

  
# On retourne au client ce que l'on veut.
  
return $result;
}

?>

L'agent affiche, pour les 2 travaux :

Travail reçu : H:foo.local:65
Charge de l'agent : !dlroW olleH (12)
1/12 complete
Travail reçu : H:foo.local:66
Charge de l'agent : Hello World! (12)
Envoi du statut : 1/12 complete
Envoi du statut : 2/12 complete
Envoi du statut : 2/12 complete
Envoi du statut : 3/12 complete
Envoi du statut : 3/12 complete
Envoi du statut : 4/12 complete
Envoi du statut : 4/12 complete
Envoi du statut : 5/12 complete
Envoi du statut : 5/12 complete
Envoi du statut : 6/12 complete
Envoi du statut : 6/12 complete
Envoi du statut : 7/12 complete
Envoi du statut : 7/12 complete
Envoi du statut : 8/12 complete
Envoi du statut : 8/12 complete
Envoi du statut : 9/12 complete
Envoi du statut : 9/12 complete
Envoi du statut : 10/12 complete
Envoi du statut : 10/12 complete
Envoi du statut : 11/12 complete
Envoi du statut : 11/12 complete
Envoi du statut : 12/12 complete
Envoi du statut : 12/12 complete
Résultat : !dlroW olleH
Résultat : Hello World!

Affichage du client :

STATUT : 1, H:foo.local:66 - 1/12
STATUT : 1, H:foo.local:66 - 2/12
STATUT : 1, H:foo.local:66 - 3/12
STATUT : 1, H:foo.local:66 - 4/12
STATUT : 1, H:foo.local:66 - 5/12
STATUT : 1, H:foo.local:66 - 6/12
STATUT : 1, H:foo.local:66 - 7/12
STATUT : 1, H:foo.local:66 - 8/12
STATUT : 1, H:foo.local:66 - 9/12
STATUT : 1, H:foo.local:66 - 10/12
STATUT : 1, H:foo.local:66 - 11/12
STATUT : 1, H:foo.local:66 - 12/12
TERMINÉ : 1, !dlroW olleH
FAIT

Voir aussi

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top