class some_script extends CliScript
{
protected function processWorker ( $item )
{
$this -> log ( "I'm doing heavy job" );
sleep ( rand ( 1 , 5 ));
$this -> log ( "I'm done doing heavy job" );
}
}
$script = new some_script();
$script -> setWorkers ( 5 );
$script -> run ();
class master_and_workers extends CliScript
{
protected $contracts = array ( 2 , 4 , 5 , 1 , 3 , 7 , 3 , 1 , 4 , 9 , 2 , 4 , 1 );
protected $results ;
protected function processMaster ()
{
foreach ( $this -> contracts as $contract )
{
while ( ! $this -> canStartWorker () ) { sleep ( 1 ); };
$this -> startWorker ( $contract );
}
$this -> waitForChildren ();
var_export ( $this -> results );
}
protected function processWorker ( $item )
{
$this -> log ( "I'm busy for { $item } seconds..." );
sleep ( $item );
$this -> log ( "Job is done." );
return "Job is done. Sleep time was { $item } " ;
}
protected function processResult ( $result )
{
$this -> results [] = $result ;
}
}
$script = new master_and_workers();
$script -> setWorkers ( 3 );
$script -> run ();
Source: https://habr.com/ru/post/128396/