Files
doc-fr/reference/gearman/gearmanclient/addtaskbackground.xml
George Peter Banyard 09685304ef Sync EN revision tags
These were skipped on my personal revcheck as I hadn't made a tool to generate a batch diff for files with no changes
2021-05-19 19:16:05 +01:00

288 lines
7.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4754397753fd79f1c846868b66a2448babab1c54 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="gearmanclient.addtaskbackground" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>GearmanClient::addTaskBackground</refname>
<refpurpose>Ajoute une tâche d'arrière-plan pour une exécution en parallèle</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>GearmanTask</type><methodname>GearmanClient::addTaskBackground</methodname>
<methodparam><type>string</type><parameter>function_name</parameter></methodparam>
<methodparam><type>string</type><parameter>workload</parameter></methodparam>
<methodparam choice="opt"><type>mixed</type><parameter role="reference">context</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>unique</parameter></methodparam>
</methodsynopsis>
<para>
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 <methodname>GearmanClient::runTasks</methodname> pour réaliser les tâches.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>function_name</parameter></term>
<listitem>
<para>
&gearman.parameter.functionname;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>workload</parameter></term>
<listitem>
<para>
&gearman.parameter.workload;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>context</parameter></term>
<listitem>
<para>
&gearman.parameter.context;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>unique</parameter></term>
<listitem>
<para>
&gearman.parameter.unique;
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Un objet <classname>GearmanTask</classname> ou &false; si la tâche
n'a pu être ajoutée.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>2 tâches dont une en arrière-plan</title>
<para>
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
<methodname>addTaskBackground</methodname>. 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.
</para>
<programlisting role="php">
<![CDATA[
<?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";
}
?>
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?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 ($x= 0; $x < $workload_size; $x++)
{
echo "Envoi du statut : " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Résultat : $result\n";
# On retourne au client ce que l'on veut.
return $result;
}
?>
]]>
</programlisting>
<para>
L'agent affiche, pour les 2 travaux :
</para>
<screen>
<![CDATA[
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!
]]>
</screen>
<para>
Affichage du client :
</para>
<screen>
<![CDATA[
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
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><methodname>GearmanClient::addTask</methodname></member>
<member><methodname>GearmanClient::addTaskHigh</methodname></member>
<member><methodname>GearmanClient::addTaskLow</methodname></member>
<member><methodname>GearmanClient::addTaskHighBackground</methodname></member>
<member><methodname>GearmanClient::addTaskLowBackground</methodname></member>
<member><methodname>GearmanClient::runTasks</methodname></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->