Gearman的并行化 - php

我想并行化Gearman和PHP已经处理的处理作业。
我不明白多次调用doBackground()之间的区别:

$gmclient->doBackground("reverse", "Hello!");
$gmclient->doBackground("reverse", "Hello!");
$gmclient->doBackground("reverse", "Hello!");

我已经注册了足够的工作人员,使用他们自己的PID运行。因此,这3个工作由3个不同的工人并行运行。

或像文档中所说的那样使用addTask()明确地进行并行化。

$gmc->addTask("reverse", "Hello World!", null, "1");
$gmc->addTask("reverse", "!dlroW olleH", null, "2");
$gmc->addTask("reverse", "!dlroW olleH", null, "3");

$gmc->runTasks()

谢谢你的帮助

参考方案

区别在于runTasks()将阻塞,直到通过addTask()添加的所有任务都完成为止。您的最后一个示例将在三个任务全部完成时完成(添加一个sleep()调用以在实践中进行查看),而第一个示例只是将这些任务踢到齿轮上,然后继续运行脚本。

使用addTask()对独立任务进行分组(但可能相关),可以在执行假定所有先前任务已完成的操作之前轻松执行一组任务。例如,可以以4种不同的分辨率调整图像大小,然后在完成所有四个任务后将图像设置为活动图像。使用runTasks()可以轻松地通过四个addTask()调用,一个runTasks()然后更改图像的状态来实现,而使用doBackground则必须轮询已提交给gearmand的任务的状态才能知道当他们完成时。

PHP:获取调用引用的数组名称 - php

假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…

PHP-MySQL结果转换为JSON - php

我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…