2016-07-27 7 views
1

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?

Antwort

2

Ich weiß nicht, warum dies geschieht, aber die folgenden vielleicht einige Hinweis sein:

Dies funktioniert:

$job->start(PTHREADS_INHERIT_ALL^PTHREADS_INHERIT_CLASSES); 

Wo dies nicht (funktioniert das genau die gleiche Funktion wie lostelefonieren ohne ein Extra-Wert):

$job->start(PTHREADS_INHERIT_ALL); 
+0

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) –

+0

u-nik: have you dieses Problem gelöst? –

Verwandte Themen