PHP Gearman ドキュメントの中を見ると、タスクと do があり、どちらにもバックグラウンドと非バックグラウンドがあり、すべて高低と通常があります。
誰でもこれらを明確にできますか?私はちょうど違いについて本当に混乱しています。
実行順序と目的の 2 つの違いがあります。
実行順序- do および runTasks によっていくつかのタスクを実行すると、do はタスクよりも優先されます。したがって、実行順序は次のようになります。
目的:
タスク- 終了時期や進行状況を気にしない短いタスクに使用します
実行 - 複雑なジョブや進行状況を確認する必要がある場合に使用します。この目的のためにGearmanJob::sendStatus()があります
worker.php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("sleep13", array('MyWorker', 'sleep13'));
while ($worker->work());
class MyWorker {
public function sleep13($job) {
$data = unserialize($job->workload());
echo 'start ' . $data['id'] . PHP_EOL;
for($i = 0; $i < 13; $i++) {
sleep(1);
$job->sendStatus($i, 13);
}
echo 'done ' . $data['id'] . PHP_EOL;
}
}
client.php
$client = new GearmanClient();
$client->addServer();
// Run task
$job_handle = $client->doBackground("sleep13", serialize(array('id' => 'normal-1')));
// Check progress
$done = false;
do {
usleep(300);
$stat = $client->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] . ", denomintor: " . $stat[3] . "\n";
} while(!$done);
echo "done!\n";
$job_handle は文字列なので、どこかに保存していつでも確認できます。
私もこれについて考えていたので、あなたのためにいくつかの調査を行いました。
do を実行すると、すぐに実行されます (ジョブ サーバーに送信されます) http://www.php.net/manual/en/gearmanclient.donormal.php
行う
単一のタスクを実行し、結果の文字列表現を返します。結果の形式について合意するかどうかは、GearmanClient と GearmanWorker 次第です。
それらのリストを作成し、GearmanClient::Run() を実行するときにそれらを並列に実行できるタスクがあったとします。
http://www.php.net/manual/en/gearmanclient.addtask.php
仕事
他のタスクと並行して実行するタスクを追加します。すべてのタスクを並行して実行するには、このメソッドを呼び出してから、GearmanClient::runTasks() を呼び出して作業を実行します。すべてのタスクを並行して実行するには、十分な数のワーカーを利用できる必要があることに注意してください。