Таймер блокировки запуска процесса reactPHP

У меня есть цикл reactPHP с двумя событиями таймера:

$loop = \React\EventLoop\Factory::create();

$process = new \React\ChildProcess\Process("php wait5seconds.php");

$process->on('exit', function($exitCode, $termSignal) {
    echo "Process Finished".PHP_EOL;
});

$loop->addTimer(2, function($timer) {
    echo "TWO".PHP_EOL;
});

$loop->addTimer(1, function($timer) use ($process) {
    echo "ONE".PHP_EOL;
    $process->start($timer->getLoop());
});

$loop->run();

Без дочернего процесса таймеры работают нормально, и я получаю вывод:

ONE
TWO

Но когда я запускаю процесс в первом таймере, второй таймер блокируется до завершения процесса. Я получаю вывод:

ONE
Process Finished
TWO

Разве не должно быть асинхронным? процесс сна (5), поэтому я ожидаю:

ONE
TWO
Process Finished

Что мне не хватает?


person Grigory Ilizirov    schedule 05.01.2017    source источник


Ответы (1)


Работает на меня.

Ваша проблема, вероятно, в том, что php wait5seconds.php приводит к ошибке и, следовательно, не работает в течение 5 секунд. Если вы замените его на sleep 5, все будет работать как положено.

person kelunik    schedule 21.01.2017
comment
Вы на линуксе? я на окнах - person Grigory Ilizirov; 25.01.2017
comment
Да, вместо этого вы можете попробовать timeout 5 в Windows. - person kelunik; 25.01.2017