gearman中任务的优先级和返回状态实例分析
本文实例讲述了gearman中任务的优先级和返回状态。分享给大家供大家参考,具体如下:
gearman中任务的优先级和返回状态
一、任务的优先级
同步阻塞调用,等待返回结果
doLow:最低优先 doNomal:正常优先级 doHigh:最优先执行
异步派发任务,不等待返回结果,返回任务句柄,通过该句柄可获取任务运行状态信息
doLowBackground doBackground doHighBackground
注意Task和doXXX区别,Task是一组job,派发后会分配到多个worker上并行执行并返回结果给调用方。
而doXXX的每个任务只会在一个worker上执行。
addTaskLow addTask addTaskHigh addTaskLowBackground addTaskBackground addTaskHighBackground
cli.php代码如下:
addServer('127.0.0.1',4730); $client->setCompleteCallback(function($task){ echo$task->data(),PHP_EOL; }); //分别添加不同优先级的Task $client->addTaskLow('sum',json_encode(array(100,100))); $client->addTask('sum',json_encode(array(200,200))); $client->addTaskHigh('sum',json_encode(array(300,300))); $client->runTasks();
worker.php代码如下:
addServer('127.0.0.1',4730); $worker->addFunction('sum',function($job){ $data=json_decode($job->workload(),true); $ret=$data[0]+$data[1]; echo$ret,PHP_EOL; sleep(1); return$ret; }); while($worker->work());
注意,为了实验效果,这里worker只需启动一个。
二、获取任务的状态
cli.php代码如下:
addServer('127.0.0.1',4730); //任务排队时的回调 $client->setCreatedCallback('reverse_create'); //有任务数据包时的回调 $client->setDataCallback('reverse_data'); //收集任务状态的回调 $client->setStatusCallback('reverse_status'); //任务完成时的回调 $client->setCompleteCallback('reverse_complete'); //任务失败时的回调 $client->setFailCallback('reverse_fail'); //分别添加不同优先级的Task $client->addTaskLow('reverse','1234567'); $client->addTask('reverse','hello'); $client->addTaskHigh('reverse','world'); $client->runTasks(); functionreverse_create($task){ echo'任务创建(',$task->jobHandle(),'):',PHP_EOL; } functionreverse_data($task){ echo'接收数据(',$task->jobHandle(),'):',$task->data(),PHP_EOL; } functionreverse_status($task){ //taskNumerator()获取任务完成情况的分子 //taskDenominator()获取任务完成情况的分母 echo'完成情况(',$task->jobHandle(),'):',$task->taskNumerator(),'/',$task->taskDenominator(),PHP_EOL; } functionreverse_complete($task){ echo'任务完成(',$task->jobHandle(),'):',$task->data(),PHP_EOL; } functionreverse_fail($task){ echo'任务失败(',$task->jobHandle(),'):',PHP_EOL; }
worker.php代码如下:
addServer('127.0.0.1',4730); $worker->addFunction('reverse',function($job){ //workload()返回接收的数据 $data=$job->workload(); //workloadSize()返回接收数据的字节大小 $dataSize=$job->workloadSize(); echo"worker:{$data}({$dataSize})\n"; $tmp=0; $mid=$dataSize/2; for($ix=0;$ix<$mid;++$ix){ $tmp=$data[$ix]; $data[$ix]=$data[$dataSize-$ix-1]; $data[$dataSize-$ix-1]=$tmp; //这里发送状态,会被client设置的回调reverse_status()接收到 //状态完成情况的分子与分母 $job->sendStatus($ix+1,$mid+1); //发送数据,被reverse_data()接收到 $job->sendData($data); sleep(1); } return$data; }); while($worker->work());
运行结果如下:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。