Gearman с PHP - темы в работнике - PullRequest
4 голосов
/ 29 июня 2011

У меня проблема с 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

Можно ли форкнуть GearmanWorker с помощью pcntl_fork ()?

Клиент:

$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;  
}

Ответы [ 2 ]

5 голосов
/ 29 июня 2011

Один работник может выполнять одну работу за один раз.Если вам нужно выполнить более одной работы, вам, конечно, нужно создать более одного работника.в вашем случае просто выполните сценарий «Рабочий» несколько раз и поместите их в фоновом режиме.Или (как вы упомянули сами) создаете вилки, но первый определенно проще;)

0 голосов
/ 29 июня 2011

вы можете попробовать функцию клона работника, чтобы создать больше работников

GearmanWorker::clone(void)
...