Rechercher une fonction PHP

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 GearmanClient::addTaskBackground ( string $function_name , string $workload [, mixed &$context [, string $unique ]] ) : GearmanTask

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.

Retour à la première page de Manuel PHP  Table des matières Haut

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

Retour à la première page de Manuel PHP  Table des matières Haut

Valeurs de retour

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

Retour à la première page de Manuel PHP  Table des matières Haut

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

Retour à la première page de Manuel PHP  Table des matières Haut

Voir aussi

Rechercher une fonction PHP

Version en cache

25/11/2024 06:11:37 Cette version de la page est en cache (à la date du 25/11/2024 06:11:37) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-gearmanclient.addtaskbackground.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut