Ich versuche, einen einfachen Thread (Erstellen mit den Pthreads ext v3 für PHP 7) innerhalb eines Symfony2-Befehls zu starten. Aber ich frage mich, ob ich einen Fehler wegen der nicht serialisierbaren Schließung bekomme (ich benutze keine Schließung irgendwo).Schwerwiegender Fehler beim Starten von Threads in Symfony-Befehl
Der Befehl:
<?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');
}
Die JobThread Klasse
<?php
class JobThread extends Thread
{
public function run()
{
echo 'Run' . PHP_EOL;
sleep(3);
echo 'End' . PHP_EOL;
}
}
Wenn ich den Befehl ausführen, erhalte ich die folgende Ausgabe:
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
Wenn ich den Thread starten außerhalb der Befehlskontext ...
$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;
bekomme ich die erwartete Ausgabe:
Starting thread...
Waiting for thread to finish executing...
Run
End
Thread finished
Wo ist der Punkt des Scheiterns?
Okay, das wird für den leeren Thread funktionieren. Aber es wird alle geladenen benutzerdefinierten Klassen fallenlassen :-(Siehe den Hinweis in diesem [Beispiel] (https://github.com/krakjoe/pthreads/blob/master/examples/SelectiveInheritance.php) –
u-nik: have you dieses Problem gelöst? –