GearmanClient::doBackground
(PECL gearman >= 0.5.0)
GearmanClient::doBackground — Run a task in the background
説明
public GearmanClient::doBackground(string
$function
, string $workload
, ?string $unique
= null
): stringRuns a task in the background, returning a job handle which can be used to get the status of the running task.
パラメータ
function
-
ワーカーが実行するために登録した関数。
workload
-
シリアライズしたデータ。
unique
-
タスクを特定するために用いる一意な ID。
戻り値
The job handle for the submitted task.
例
例1 Submit and monitor a background job
The worker in this example has an artificial delay introduced to mimic a long running job. The client script periodically checks the status of the running job.
<?php
/* create our object */
$gmclient= new GearmanClient();
/* add the default server */
$gmclient->addServer();
/* run reverse client */
$job_handle = $gmclient->doBackground("reverse", "this is a test");
if ($gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo "bad return code\n";
exit;
}
$done = false;
do
{
sleep(3);
$stat = $gmclient->jobStatus($job_handle);
if (!$stat[0]) // the job is known so it is not done
$done = true;
echo "Running: " . ($stat[1] ? "true" : "false") . ", numerator: " . $stat[2] . ", denominator: " . $stat[3] . "\n";
}
while(!$done);
echo "done!\n";
?>
上の例の出力は、 たとえば以下のようになります。
Running: true, numerator: 3, denominator: 14 Running: true, numerator: 6, denominator: 14 Running: true, numerator: 9, denominator: 14 Running: true, numerator: 12, denominator: 14 Running: false, numerator: 0, denominator: 0 done!
参考
- GearmanClient::doNormal() - Run a single task and return a result
- GearmanClient::doHigh() - Run a single high priority task
- GearmanClient::doLow() - Run a single low priority task
- GearmanClient::doHighBackground() - Run a high priority task in the background
- GearmanClient::doLowBackground() - Run a low priority task in the background
+add a note
User Contributed Notes 1 note
felix at passcod dot name ¶
7 years ago
Behaviour of the unique ID argument:
If it's not provided, it defaults to a UUIDv1 (timestamp + mac address).
Otherwise, if a job with the same unique ID exists (i.e. is either queued or currently executing), then that job is used, not the one you're submitting. This does not apply to past (completed) jobs, and works across the entire job server pool, assuming no partitioning.
Or with code (the values in [brackets] are the server-assigned job identifiers):
<?php
$gearman->doBackground('sleep', '3', '123'); // [H:host:1] Starts sleep(3)
$gearman->doBackground('sleep', '5', '456'); // [H:host:2] Queues sleep(5)
$gearman->doBackground('sleep', '3', '123'); // [H:host:1] Does nothing
$gearman->doBackground('sleep', '1', '123'); // [H:host:1] Also does nothing (diff args don't trigger new jobs)
sleep (3);
// Job 123 [sleep(3)] has finished by now
$gearman->doBackground('sleep', '3', '123'); // [H:host:3] Starts a new job
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google