public function testRun_WithTimeout_WithOnTimeout() { Supervisor::taskFactoryMode(array('quantity' => 3, 'timeout' => 1, 'onTimeout' => array($this, 'onTimeout'), 'factory' => array($this, 'fetchTask_WithSleeping')))->start(); $content = \file_get_contents($this->logFile); $arr = array_filter(explode(',', $content), function ($i) { return $i !== ''; }); sort($arr); $this->assertEquals(array('1', '4', '5', '7', '10', '13', '14'), $arr); $this->assertEquals(3, \count($this->timeoutProcesses)); }
<?php use Comos\Qpm\Supervision\Supervisor; use Comos\Qpm\Process\Runnable; use Comos\Qpm\Log\Logger; require __DIR__ . '/bootstrap.inc.php'; Logger::useSimpleLogger(__FILE__ . '.log'); class Task implements Runnable { private $stop = false; public function run() { declare (ticks=1); pcntl_signal(SIGTERM, array($this, 'onTerm')); echo "B"; while (!$this->stop) { sleep(1); echo '.'; } echo "BYE\n"; } public function onTerm() { echo "TERM\n"; $this->stop = true; } } Supervisor::taskFactoryMode(array('timeout' => 5, 'termTimeout' => 1, 'quantity' => 3, 'worker' => 'Task'))->start();