4

我对 Gearman 和 PHP 工作人员有疑问。我想同时运行相同的功能。但现在 Gearman 似乎让它成为了一个队列。

我正在寻找的输出是:

$ ./daemon.php  
Starting daemon...
Received job: H:www-dev1:15 
Received job: H:www-dev1:16 
Finished
Finished

但是当前代码的输出是:

$ ./daemon.php  
Starting daemon...
Received job: H:www-dev1:15 
Finished
Received job: H:www-dev1:16 
Finished

是否可以使用 pcntl_fork() 分叉 GearmanWorker?

客户:

$client = new GearmanClient();
$client->addServer();

$args = array('test' => 'test1');
$args = serialize($args);

$client->doBackground('test', $args);
sleep(1);
$client->doBackground('test', $args);

echo "Done";

工人:

#!/usr/bin/php
<?php

echo "Starting daemon..." . PHP_EOL;

$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('test', 'testFunc');

while ($worker->work()) {
}

function testFunc($job) {

    echo "Received job: " . $job->handle() . PHP_EOL;
    sleep(10);
    echo "Finished" . PHP_EOL;  
}
4

2 回答 2

5

一名工人一次可以处理一项工作。如果您需要执行多个作业,则当然需要创建多个工人。在您的情况下,只需多次执行“Worker”脚本并将它们放在后台。或者(正如你自己提到的)创建分叉,但第一个肯定更容易;)

于 2011-06-29T12:16:41.917 回答
-1

您可以尝试工作人员克隆功能来创建更多工作人员

GearmanWorker::clone(void)
于 2011-06-29T12:27:04.520 回答