Я пытаюсь запустить простой поток (создайте с помощью pthreads ext v3 для php 7) в команде Symfony2. Но мне интересно, если я получаю сообщение об ошибке из-за несериализуемого закрытия (я не использую закрытие в любом месте).
Команда:
<?php public function execute(InputInterface $input, OutputInterface $output) { $job = new JobThread(); $output->writeln('Starting thread...'); $job->start(); $output->writeln('Waiting for thread to finish executing...'); $job->join(); $output->writeln('Thread finished'); }
Класс JobThread
<?php class JobThread extends Thread { public function run() { echo 'Run' . PHP_EOL; sleep(3); echo 'End' . PHP_EOL; } }
Если я выполню команду, я получаю следующий вывод:
Starting thread... PHP Fatal error: Uncaught Exception: Serialization of 'Closure' is not allowed in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0
Если я запускаю поток вне контекста команды …
$job = new ThreadJob(); echo 'Starting thread...' . PHP_EOL; $job->start(); echo 'Waiting for thread to finish executing...' . PHP_EOL; $job->join(); echo 'Thread finished' . PHP_EOL;
я получаю ожидаемый результат:
Starting thread... Waiting for thread to finish executing... Run End Thread finished
Где точка провала?