/** * 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.'); }
<?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"; }]);