GearmanClient::doBackground

(PECL gearman >= 0.5.0)

GearmanClient::doBackground在后台运行任务

说明

public GearmanClient::doBackground(string $function, string $workload, ?string $unique = null): string

在后台运行任务,返回一个作业句柄,可用于获取正在运行的任务的状态。

参数

function

工作者要执行的已注册函数

workload

要处理的序列化数据

unique

用于标识特定任务的唯一 ID

返回值

提交任务的作业句柄。

范例

范例 #1 提交和监控后台作业

此示例中的工作者引入了人工延迟来模拟长时间运行的作业。客户端脚本定期检查正在运行的作业的状态。

<?php

/* 创建我们的对象 */
$gmclient= new GearmanClient();

/* 添加默认服务器 */
$gmclient->addServer();

/* 运行反转客户端 */
$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]) // 作业已知,所以它没有完成
$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!

参见

添加注释

用户贡献的注释 1 个注释

7
felix at passcod dot name
6 年前
唯一 ID 参数的行为

如果没有提供,它默认为 UUIDv1(时间戳 + MAC 地址)。

否则,如果存在具有相同唯一 ID 的作业(即已排队或正在执行),则使用该作业,而不是您提交的作业。这并不适用于过去的(已完成的)作业,并且在整个作业服务器池中都有效,假设没有分区。

或使用代码(方括号中的值是服务器分配的作业标识符)

<?php

$gearman
->doBackground('sleep', '3', '123'); // [H:host:1] 启动 sleep(3)
$gearman->doBackground('sleep', '5', '456'); // [H:host:2] 将 sleep(5) 排队
$gearman->doBackground('sleep', '3', '123'); // [H:host:1] 不做任何操作
$gearman->doBackground('sleep', '1', '123'); // [H:host:1] 也不做任何操作(不同的参数不会触发新作业)

sleep (3);
// 现在作业 123 [sleep(3)] 已完成

$gearman->doBackground('sleep', '3', '123'); // [H:host:3] 启动一个新作业

?>
To Top