gearman中任务的优先级和返回状态

一、任务的优先级

同步阻塞调用,等待返回结果

doLow:最低优先
doNomal:正常优先级
doHigh:最优先执行

异步派发任务,不等待返回结果,返回任务句柄,通过该句柄可获取任务运行状态信息

doLowBackground
doBackground
doHighBackground

注意Task和doXXX区别,Task是一组job,派发后会分配到多个worker上并行执行并返回结果给调用方。
而doXXX的每个任务只会在一个worker上执行。

addTaskLow
addTask
addTaskHigh

addTaskLowBackground
addTaskBackground
addTaskHighBackground

cli.php代码如下:

<?php
$client = new GearmanClient();
$client->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代码如下:

<?php
$worker = new GearmanWorker();
$worker->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代码如下:

<?php
$client = new GearmanClient();
$client->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();

function reverse_create($task) {
    echo ‘任务创建(‘, $task->jobHandle() , ‘): ‘, PHP_EOL;
}
function reverse_data($task) {
    echo ‘接收数据(‘, $task->jobHandle() , ‘): ‘, $task->data(), PHP_EOL;
}
function reverse_status($task) {
    //taskNumerator()获取任务完成情况的分子
    //taskDenominator()获取任务完成情况的分母
    echo ‘完成情况(‘, $task->jobHandle() , ‘): ‘, $task->taskNumerator(), ‘/‘, $task->taskDenominator(), PHP_EOL;
}
function reverse_complete($task) {
    echo ‘任务完成(‘, $task->jobHandle() , ‘): ‘, $task->data(), PHP_EOL;
}
function reverse_fail($task) {
    echo ‘任务失败(‘, $task->jobHandle() , ‘): ‘, PHP_EOL;
}

worker.php代码如下:

<?php
$worker = new GearmanWorker();
$worker->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());

运行结果如下:

时间: 2024-09-28 19:54:28

gearman中任务的优先级和返回状态的相关文章

AIR中用户离开状态和返回状态

通过idleThreshold=10;(秒) USER_IDLE.USER_PRESENT事件 可以对用户离开状态和返回状态进行处理. 例如用户5分钟没有鼠标键盘动作,进入离开状态, 有了鼠标键盘动作就回到在线状态. NativeApplication.nativeApplication.idleThreshold = idleTime; NativeApplication.nativeApplication.addEventListener(Event.USER_IDLE,onIdle); N

javascript中运算符的优先级

运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出JavaScript运算符.具有相同优先级的运算符按从左至右的顺序求值. 其中圆括号可用来改变运算符优先级所决定的求值顺序.这意味着圆括号中的表达式应在其用于表达式的其余部分之前全部被求值. z = 78 * (96 + 3 + 45) 在该表达式中有五个运算符: =, *, (), +

利用LoadRunner判断HTTP服务器的返回状态

利用LoadRunner判断HTTP服务器的返回状态第一种方法:是利用LR的内置函数web_get_int_property.举例:#include "web_api.h"Action(){int HttpRetCode;web_url("网易",       "URL=http://www.163.com",       "TargetFrame=_TOP",       LAST);HttpRetCode = web_ge

【Android】Android中Service类onStartCommand的返回值有关问题(转)

@Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("---------->>onStartCommand2"); return super.onStartCommand(intent, flags, startId); } Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象

控制人物转向移动,动画播放的过程中插播其他动画后返回

人物转向移动的代码是我在网上粘贴后改动的-----------------------侵删--------------------------- 难点:如何在A动画中插播B动画再返回 思路:开始我的想法是在两个动画之间create transition用代码控制返回,但是条件是2s播放一次,间隔时间的重制和这个有冲突,如何使B动画播放完毕后再返回,后来经大神指点(万分感谢呀O(∩_∩)O~~),在A动画播放的状态下判断时间,2s后直接播放B动画,transition 勾选Has Exit Tim

php中Http请求方法和响应状态码整理教程

HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,格式如下 可见请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分 个HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,格式如下 可见请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.HTTP请求方法: GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页

服务器返回状态码解析

服务器返回的各种状态码到底表示什么意思呢,哪些说明没有问题,哪些返回状态是出问题了,这个返回状态码表示的是什么意思,下面是服务器各种返回状态码的意义: 100(继续)请求者应当继续提出请求.服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余部分. 101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换. 200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果您的robots.txt文件显示为此状态,那么,这表示Googlebo

AJAX请求时status返回状态明细表

AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18:24对于readyState的五种状态的描述或者说定义,很多Ajax书(英文原版)中大都语焉不详 在<Pragmatic Ajax A Web 2.0 Primer >中偶然看到对readyStae状态的介绍,感觉这个介绍很实在-- 比较理想的解释方法应该以"状态:任务(目标)+过程+表现(或特征)"的表达模式来对这几个状态进行定义 在<Pragmatic Ajax A

HTTP返回状态码和错误

HTTP 返回状态码一.1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应. ? 100 - 继续. ? 101 - 切换协议. 二.2xx - 成功 这类状态代码表明服务器成功地接受了客户端请求. ? 200 - 确定.客户端请求已成功. ? 201 - 已创建. ? 202 - 已接受. ? 203 - 非权威性信息. ? 204 - 无内容. ? 205 - 重置内容. ? 206 - 部分内容. 三.3xx - 重定向 客户端浏