Esempio n. 1
0
require_once __DIR__ . '/../autoload.php';
$wp = new \QXS\WorkerPool\WorkerPool();
$wp->setWorkerPoolSize(4)->create(new \QXS\WorkerPool\ClosureWorker(function ($input, $semaphore, $storage) {
    sleep(rand(1, 3));
    // this is the working load!
    return $input;
}));
$i = 20;
while ($i < 40) {
    // is there a free worker?
    if ($wp->getFreeWorkers() > 0) {
        $wp->run($i);
        $i++;
    } else {
        // poll some data
        while ($wp->hasResults() && $wp->getFreeWorkers() == 0) {
            $val = $wp->getNextResult();
            echo "Received: " . $val['data'] . "    from pid " . $val['pid'] . "\n";
        }
        // still no free workers?
        if ($wp->getFreeWorkers() == 0) {
            usleep(1000);
            // and sleep a bit
        }
    }
}
while ($wp->hasResults() || $wp->getBusyWorkers() > 0) {
    // poll some data
    foreach ($wp as $val) {
        echo "Received: " . $val['data'] . "    from pid " . $val['pid'] . "\n";
    }