Усть две консольные команды check и stream. Check родительский процесс, а stream дочерний.
Использую Reactphp.
checkpublic function handle()
{
$stream = $this->argument('stream');
$offset = 0;
//$v = new child();
$loop = \React\EventLoop\Factory::create();
for ($i = 1; $i <= $stream; $i++) {
$process = new \React\ChildProcess\Process(Artisan::call('proxy:stream', ['stream' => $i]));
$process->on('exit', function ($exitCode, $termSignal) {
echo "Child exit\n";
});
$loop->addTimer(0.5, function ($timer) use ($process) {
$process->start($timer->getLoop());
$process->stdout->on('data', function ($output) {
echo "{$output}";
});
});
$offset = 2 * $i;
}
$loop->addPeriodicTimer(5, function ($timer) {
echo "Parent cannot be blocked by child\n";
});
$loop->run();
}
streampublic function handle()
{
$check = new CheckProxy();
$stream = $this->argument('stream');
$offset = $this->argument('offset');
for($i=0; $i< 10; $i++) {
echo "Stream ".$stream." - ".$i."\n";
sleep(1);
}
}
Выводит: Stream 1 - 1
Stream 1 - 2
Stream 1 - 3
....
Stream 1 - 9
Stream 2 - 1
и т.д.
Т.е. работает как обычный цикл и не о какой многопоточности и не идет речь.
Если подключать в родительском процессе "php test.php" с таким же кодом как и stream. то все работает нормально.
Подскажите возможно ли вызывать консольные команды в разных потоках?