Добрый день, товарищи.
Есть необходимость выполнить определённый процесс в несколько потоков. Открыл для себя расширение для php - pthreads.
На примере простого скрипта вне Laravel всё работает замечательно и мне очень понравились результаты. Решил перенести в Laravel и столкнулся с проблемой. Конечно же я поискал в сети, отыскал несколько вопросов на stackoverflow, где отвечал сам автор расширения. Но мне не помогли его ответы, потому я прошу вас помочь мне.
Вопрос с ответом автора расширения.
Есть класс App\Commands\QuestionsParserCommand. Внутри я создаю экземпляр класса App\My\Questions\QuestionsParser и вызываю метод init. Дальше код метода init():
// Создадим пул
$pool = new Pool($this->threads, ParserWorkers::class);
// Создадим класс потока
$thread = new class extends Threaded
{
public function run()
{
// Класс будет получать определённые данные из некого провайдера,
// который будет распределяться между потоками через ParserWorkers
// Работать с API и сохранять данные в БД.
// Необходима работа с потоками, ибо данных для обработки невероятно много
echo '+';
}
};
// Запустим потоки
for ($i = 0; $i < $this->threads; $i++) {
$pool->submit($thread);
}
$pool->shutdown();
Класс ParserWorkers наследуется от Worker и пока имеет пустой метод run().
В итоге я запускаю сценарий и получаю в логах сообщение:
[13-Oct-2016 11:27:35 Europe/Moscow] 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
Сведения:
Laravel 5.2.43, php 7.0.8, Windows
P.S. Пожалуйста, не предлагайте планировщик задач Laravel или очереди, я прекрасно про них помню, но они не совсем подходят для моей задачи.
Благодарю за любую помощь.