一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - gearman中任務的優先級和返回狀態實例分析

gearman中任務的優先級和返回狀態實例分析

2021-09-30 13:37懷素真 PHP教程

這篇文章主要介紹了gearman中任務的優先級和返回狀態,結合實例形式分析了gearman任務的優先級以及獲取返回狀態相關操作技巧,需要的朋友可以參考下

本文實例講述了gearman中任務的優先級和返回狀態。分享給大家供大家參考,具體如下:

gearman中任務的優先級和返回狀態

一、任務的優先級

同步阻塞調用,等待返回結果

  1. doLow:最低優先
  2. doNomal:正常優先級
  3. doHigh:最優先執行

異步派發任務,不等待返回結果,返回任務句柄,通過該句柄可獲取任務運行狀態信息

  1. doLowBackground
  2. doBackground
  3. doHighBackground

注意Task和doXXX區別,Task是一組job,派發后會分配到多個worker上并行執行并返回結果給調用方。
而doXXX的每個任務只會在一個worker上執行。

  1. addTaskLow
  2. addTask
  3. addTaskHigh
  4.  
  5. addTaskLowBackground
  6. addTaskBackground
  7. addTaskHighBackground

cli.php代碼如下:

  1. <?php
  2. $client = new GearmanClient();
  3. $client->addServer('127.0.0.1', 4730);
  4. $client->setCompleteCallback(function($task) {
  5. echo $task->data(), PHP_EOL;
  6. });
  7. //分別添加不同優先級的Task
  8. $client->addTaskLow('sum', json_encode(array(100, 100)));
  9. $client->addTask('sum', json_encode(array(200, 200)));
  10. $client->addTaskHigh('sum', json_encode(array(300, 300)));
  11.  
  12. $client->runTasks();

worker.php代碼如下:

  1. <?php
  2. $worker = new GearmanWorker();
  3. $worker->addServer('127.0.0.1', 4730);
  4. $worker->addFunction('sum', function($job) {
  5. $data = json_decode($job->workload(), true);
  6. $ret = $data[0] + $data[1];
  7. echo $ret, PHP_EOL;
  8. sleep(1);
  9. return $ret;
  10. });
  11. while($worker->work());

注意,為了實驗效果,這里worker只需啟動一個。

gearman中任務的優先級和返回狀態實例分析

二、獲取任務的狀態

cli.php代碼如下:

  1. <?php
  2. $client = new GearmanClient();
  3. $client->addServer('127.0.0.1', 4730);
  4. //任務排隊時的回調
  5. $client->setCreatedCallback('reverse_create');
  6. //有任務數據包時的回調
  7. $client->setDataCallback('reverse_data');
  8. //收集任務狀態的回調
  9. $client->setStatusCallback('reverse_status');
  10. //任務完成時的回調
  11. $client->setCompleteCallback('reverse_complete');
  12. //任務失敗時的回調
  13. $client->setFailCallback('reverse_fail');
  14. //分別添加不同優先級的Task
  15. $client->addTaskLow('reverse', '1234567');
  16. $client->addTask('reverse', 'hello');
  17. $client->addTaskHigh('reverse', 'world');
  18.  
  19. $client->runTasks();
  20.  
  21. function reverse_create($task) {
  22. echo '任務創建(', $task->jobHandle() , '): ', PHP_EOL;
  23. }
  24. function reverse_data($task) {
  25. echo '接收數據(', $task->jobHandle() , '): ', $task->data(), PHP_EOL;
  26. }
  27. function reverse_status($task) {
  28. //taskNumerator()獲取任務完成情況的分子
  29. //taskDenominator()獲取任務完成情況的分母
  30. echo '完成情況(', $task->jobHandle() , '): ', $task->taskNumerator(), '/', $task->taskDenominator(), PHP_EOL;
  31. }
  32. function reverse_complete($task) {
  33. echo '任務完成(', $task->jobHandle() , '): ', $task->data(), PHP_EOL;
  34. }
  35. function reverse_fail($task) {
  36. echo '任務失敗(', $task->jobHandle() , '): ', PHP_EOL;
  37. }

worker.php代碼如下:

  1. <?php
  2. $worker = new GearmanWorker();
  3. $worker->addServer('127.0.0.1', 4730);
  4. $worker->addFunction('reverse', function($job) {
  5. //workload()返回接收的數據
  6. $data = $job->workload();
  7. //workloadSize()返回接收數據的字節大小
  8. $dataSize = $job->workloadSize();
  9. echo "worker: {$data} ({$dataSize}) \n";
  10.  
  11. $tmp = 0;
  12. $mid = $dataSize / 2;
  13. for($ix = 0; $ix < $mid; ++$ix) {
  14. $tmp = $data[$ix];
  15. $data[$ix] = $data[$dataSize - $ix - 1];
  16. $data[$dataSize - $ix - 1] = $tmp;
  17.  
  18. //這里發送狀態,會被client設置的回調reverse_status()接收到
  19. //狀態完成情況的分子與分母
  20. $job->sendStatus($ix + 1, $mid + 1);
  21. //發送數據,被reverse_data()接收到
  22. $job->sendData($data);
  23. sleep(1);
  24. }
  25. return $data;
  26. });
  27. while($worker->work());

運行結果如下:

gearman中任務的優先級和返回狀態實例分析

gearman中任務的優先級和返回狀態實例分析

希望本文所述對大家PHP程序設計有所幫助。

原文鏈接:https://www.cnblogs.com/jkko123/p/6537522.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 希岛爱理aⅴ在线中文字幕 午夜综合网 | 九九热视频免费 | 亚洲国产在线视频精品 | 情趣内衣情趣玩具play | 故意短裙公车被强好爽在线播放 | 99久久精品自在自看国产 | ass巨大胖女人sias | 亚洲毛片网 | 欧美kkk4444在线观看 | 精品一区二区三区免费观看 | 超级乱淫伦短篇小说做车 | 亚洲天堂男人网 | 亚洲精品日韩专区在线观看 | 国产偷窥女洗浴在线观看亚洲 | 亚州在线播放 | 91大神第九部红酒气质女 | 特黄特级高清免费视频毛片 | 国内精品在线播放 | 91调教| 久久综合狠狠综合久久综合88 | 四虎伊人| 国产999在线观看 | 国产成人精品视频一区二区不卡 | 精品国产美女福利在线 | 9999视频 | 国偷盗摄自产福利一区在线 | 污污免费| 国产亚洲福利一区二区免费看 | 91久久碰国产 | 日韩在线 在线播放 | 国内精品91东航翘臀女神在线 | 国产区综合另类亚洲欧美 | 亚洲精品久久7777777 | 久久嫩草影院网站 | 欧美精品亚洲精品日韩专区va | 国产成人精品一区二三区 | 久久99国产亚洲高清观着 | 欧美一区二区三区精品 | 国产欧美日韩一区二区三区在线 | 欧美专区亚洲 | 精品视频一区二区三区免费 |