@werder33

Возможно ли запускать консольные команды Laravel в разных потоках?

Усть две консольные команды check и stream. Check родительский процесс, а stream дочерний.
Использую Reactphp.
check
public 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();

    }

stream
public 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. то все работает нормально.
Подскажите возможно ли вызывать консольные команды в разных потоках?
  • Вопрос задан
  • 430 просмотров
Пригласить эксперта
Ответы на вопрос 1
@werder33 Автор вопроса
Нужно вызывать дочерний процесс вот так:
$process = new \React\ChildProcess\Process('php artisan proxy:stream '.$i);

и все работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы