<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Add a task to be run in parallel</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="gearmanclient.addservers.html">GearmanClient::addServers</a></div> <div class="next" style="text-align: right; float: right;"><a href="gearmanclient.addtaskbackground.html">GearmanClient::addTaskBackground</a></div> <div class="up"><a href="class.gearmanclient.html">GearmanClient</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="gearmanclient.addtask" class="refentry"> <div class="refnamediv"> <h1 class="refname">GearmanClient::addTask</h1> <p class="verinfo">(PECL gearman >= 0.5.0)</p><p class="refpurpose"><span class="refname">GearmanClient::addTask</span> — <span class="dc-title">Add a task to be run in parallel</span></p> </div> <div class="refsect1 description" id="refsect1-gearmanclient.addtask-description"> <h3 class="title">Description</h3> <div class="methodsynopsis dc-description"> <span class="modifier">public</span> <span class="type"><a href="class.gearmantask.html" class="type GearmanTask">GearmanTask</a></span> <span class="methodname"><strong>GearmanClient::addTask</strong></span> ( <span class="methodparam"><span class="type">string</span> <code class="parameter">$function_name</code></span> , <span class="methodparam"><span class="type">string</span> <code class="parameter">$workload</code></span> [, <span class="methodparam"><span class="type"><a href="language.pseudo-types.html#language.types.mixed" class="type mixed">mixed</a></span> <code class="parameter reference">&$context</code></span> [, <span class="methodparam"><span class="type">string</span> <code class="parameter">$unique</code></span> ]] )</div> <p class="para rdfs-comment"> Adds a task to be run in parallel with other tasks. Call this method for all the tasks to be run in parallel, then call <span class="methodname"><a href="gearmanclient.runtasks.html" class="methodname">GearmanClient::runTasks()</a></span> to perform the work. Note that enough workers need to be available for the tasks to all run in parallel. </p> </div> <div class="refsect1 parameters" id="refsect1-gearmanclient.addtask-parameters"> <h3 class="title">Parameters</h3> <p class="para"> <dl> <dt> <span class="term"><em><code class="parameter">function_name</code></em></span> <dd> <p class="para"> A registered function the worker is to execute </p> </dd> </dt> <dt> <span class="term"><em><code class="parameter">workload</code></em></span> <dd> <p class="para"> Serialized data to be processed </p> </dd> </dt> <dt> <span class="term"><em><code class="parameter">context</code></em></span> <dd> <p class="para"> Application context to associate with a task </p> </dd> </dt> <dt> <span class="term"><em><code class="parameter">unique</code></em></span> <dd> <p class="para"> A unique ID used to identify a particular task </p> </dd> </dt> </dl> </p> </div> <div class="refsect1 returnvalues" id="refsect1-gearmanclient.addtask-returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> A <a href="class.gearmantask.html" class="classname">GearmanTask</a> object or <strong><code>FALSE</code></strong> if the task could not be added. </p> </div> <div class="refsect1 examples" id="refsect1-gearmanclient.addtask-examples"> <h3 class="title">Examples</h3> <p class="para"> <div class="example" id="example-4315"> <p><strong>Example #1 Basic submission of two tasks</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br /></span><span style="color: #FF8000"># Create our gearman client<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">= new </span><span style="color: #0000BB">GearmanClient</span><span style="color: #007700">(); <br /><br /></span><span style="color: #FF8000"># add the default job server<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-></span><span style="color: #0000BB">addServer</span><span style="color: #007700">(); <br /><br /></span><span style="color: #FF8000"># set a function to be called when the work is complete<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-></span><span style="color: #0000BB">setCompleteCallback</span><span style="color: #007700">(</span><span style="color: #DD0000">"complete"</span><span style="color: #007700">); <br /><br /></span><span style="color: #FF8000"># add a task to perform the "reverse" function on the string "Hello World!"<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-></span><span style="color: #0000BB">addTask</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Hello World!"</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #DD0000">"1"</span><span style="color: #007700">); <br /><br /></span><span style="color: #FF8000"># add another task to perform the "reverse" function on the string "!dlroW olleH"<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-></span><span style="color: #0000BB">addTask</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"!dlroW olleH"</span><span style="color: #007700">, </span><span style="color: #0000BB">null</span><span style="color: #007700">, </span><span style="color: #DD0000">"2"</span><span style="color: #007700">); <br /><br /></span><span style="color: #FF8000"># run the tasks<br /></span><span style="color: #0000BB">$gmclient</span><span style="color: #007700">-></span><span style="color: #0000BB">runTasks</span><span style="color: #007700">(); <br /><br />function </span><span style="color: #0000BB">complete</span><span style="color: #007700">(</span><span style="color: #0000BB">$task</span><span style="color: #007700">) <br />{ <br /> print </span><span style="color: #DD0000">"COMPLETE: " </span><span style="color: #007700">. </span><span style="color: #0000BB">$task</span><span style="color: #007700">-></span><span style="color: #0000BB">unique</span><span style="color: #007700">() . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$task</span><span style="color: #007700">-></span><span style="color: #0000BB">data</span><span style="color: #007700">() . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">; <br />}<br /><br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> COMPLETE: 2, Hello World! COMPLETE: 1, !dlroW olleH </pre></div> </div> </div> <div class="example" id="example-4316"> <p><strong>Example #2 Basic submission of two tasks with passing application context</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /><br />$client </span><span style="color: #007700">= new </span><span style="color: #0000BB">GearmanClient</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$client</span><span style="color: #007700">-></span><span style="color: #0000BB">addServer</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># set a function to be called when the work is complete<br /></span><span style="color: #0000BB">$client</span><span style="color: #007700">-></span><span style="color: #0000BB">setCompleteCallback</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse_complete"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000"># Add some tasks for a placeholder of where to put the results<br /></span><span style="color: #0000BB">$results </span><span style="color: #007700">= array();<br /></span><span style="color: #0000BB">$client</span><span style="color: #007700">-></span><span style="color: #0000BB">addTask</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"Hello World!"</span><span style="color: #007700">, &</span><span style="color: #0000BB">$results</span><span style="color: #007700">, </span><span style="color: #DD0000">"t1"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$client</span><span style="color: #007700">-></span><span style="color: #0000BB">addTask</span><span style="color: #007700">(</span><span style="color: #DD0000">"reverse"</span><span style="color: #007700">, </span><span style="color: #DD0000">"!dlroW olleH"</span><span style="color: #007700">, &</span><span style="color: #0000BB">$results</span><span style="color: #007700">, </span><span style="color: #DD0000">"t2"</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$client</span><span style="color: #007700">-></span><span style="color: #0000BB">runTasks</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000"># The results should now be filled in from the callbacks<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$results </span><span style="color: #007700">as </span><span style="color: #0000BB">$id </span><span style="color: #007700">=> </span><span style="color: #0000BB">$result</span><span style="color: #007700">)<br /> echo </span><span style="color: #0000BB">$id </span><span style="color: #007700">. </span><span style="color: #DD0000">": " </span><span style="color: #007700">. </span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">] . </span><span style="color: #DD0000">", " </span><span style="color: #007700">. </span><span style="color: #0000BB">$result</span><span style="color: #007700">[</span><span style="color: #DD0000">'data'</span><span style="color: #007700">] . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /><br />function </span><span style="color: #0000BB">reverse_complete</span><span style="color: #007700">(</span><span style="color: #0000BB">$task</span><span style="color: #007700">, </span><span style="color: #0000BB">$results</span><span style="color: #007700">)<br />{<br /> </span><span style="color: #0000BB">$results</span><span style="color: #007700">[</span><span style="color: #0000BB">$task</span><span style="color: #007700">-></span><span style="color: #0000BB">unique</span><span style="color: #007700">()] = array(</span><span style="color: #DD0000">"handle"</span><span style="color: #007700">=></span><span style="color: #0000BB">$task</span><span style="color: #007700">-></span><span style="color: #0000BB">jobHandle</span><span style="color: #007700">(), </span><span style="color: #DD0000">"data"</span><span style="color: #007700">=></span><span style="color: #0000BB">$task</span><span style="color: #007700">-></span><span style="color: #0000BB">data</span><span style="color: #007700">());<br />}<br /><br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> t2: H.foo:21, Hello World! t1: H:foo:22, !dlroW olleH </pre></div> </div> </div> </p> </div> <div class="refsect1 seealso" id="refsect1-gearmanclient.addtask-seealso"> <h3 class="title">See Also</h3> <p class="para"> <ul class="simplelist"> <li class="member"> <span class="methodname"><a href="gearmanclient.addtaskhigh.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::addTaskHigh()</a> - Add a high priority task to run in parallel</span></li> <li class="member"> <span class="methodname"><a href="gearmanclient.addtasklow.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::addTaskLow()</a> - Add a low priority task to run in parallel</span></li> <li class="member"> <span class="methodname"><a href="gearmanclient.addtaskbackground.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::addTaskBackground()</a> - Add a background task to be run in parallel</span></li> <li class="member"> <span class="methodname"><a href="gearmanclient.addtaskhighbackground.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::addTaskHighBackground()</a> - Add a high priority background task to be run in parallel</span></li> <li class="member"> <span class="methodname"><a href="gearmanclient.addtasklowbackground.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::addTaskLowBackground()</a> - Add a low priority background task to be run in parallel</span></li> <li class="member"> <span class="methodname"><a href="gearmanclient.runtasks.html" class="methodname" rel="rdfs-seeAlso">GearmanClient::runTasks()</a> - Run a list of tasks in parallel</span></li> </ul> </p> </div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="gearmanclient.addservers.html">GearmanClient::addServers</a></div> <div class="next" style="text-align: right; float: right;"><a href="gearmanclient.addtaskbackground.html">GearmanClient::addTaskBackground</a></div> <div class="up"><a href="class.gearmanclient.html">GearmanClient</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>