コード例 #1
0
ファイル: PoolTest.php プロジェクト: gielfeldt/simple-worker
 /**
  * Test worker.
  *
  * @covers \Gielfeldt\SimpleWorker\Pool::addWorkers
  * @covers \Gielfeldt\SimpleWorker\Pool::process
  */
 public function testConcurrency()
 {
     $pool = new Pool();
     $processed = [];
     $callback = function ($worker) use(&$processed) {
         $processed[$worker->key] = true;
     };
     $workers = [];
     $workers[] = new SimpleTestWorker('key1', 1);
     $workers[] = new SimpleTestWorker('key2', 1);
     $workers[] = new SimpleTestWorker('key3', 1);
     $workers[] = new SimpleTestWorker('key4', 1);
     $workers[] = new SimpleTestWorker('key5', 1);
     $workers[] = new SimpleTestWorker('key6', 1);
     $workers[] = new SimpleTestWorker('key7', 1);
     $pool->addWorkers($workers, $callback);
     $this->assertTrue(count($processed) == 0, 'Worker prematurely executed.');
     $pool->process();
     $this->assertTrue(count($processed) == 7, 'Workers did not execute as expected.');
 }
コード例 #2
0
ファイル: worker.php プロジェクト: gielfeldt/simple-worker
<?php

namespace Gielfeldt\SimpleWorker\Example;

require 'vendor/autoload.php';
use Gielfeldt\SimpleWorker\Pool;
use Gielfeldt\SimpleWorker\Test\SimpleTestWorker;
$pool = new Pool(['concurrency' => 1]);
$time = microtime(true);
$workers = [];
for ($i = 0; $i < 10; $i++) {
    $workers[] = new SimpleTestWorker(uniqid(), 0.5);
}
print "Adding worker\n";
$pool->addWorkers($workers, function ($worker) use($time) {
    $elapsed = microtime(true) - $time;
    print "\n{$worker->key} is ready! Elapsed time: {$elapsed}\n";
});
print "Processing workers\n";
$pool->process(['progress_callback' => function ($pool) {
    print ".";
}, 'finish_callback' => function ($pool) {
    print "\n";
}]);