Ich arbeite an der Verbesserung eines Prozesses in PHP, also habe ich Multithreading mit Worker zum Verwalten meiner Threads verwendet. Die Threads im Worker werden jedoch nicht gleichzeitig ausgeführt.PHP - PTHREAD Worker Threads, die nicht gleichzeitig ausgeführt werden
Dies ist mein Beispielcode
namespace App\Engine\Threads\ThreadClass;
class StatePaperAttendancePDFThread extends \Threaded
{
private $write_folder_name;
private $center_code;
private $paper_id;
private $title;
public function __construct($write_folder_name, $center_code, $paper_id, $title)
{
$this->write_folder_name = $write_folder_name;
$this->center_code = $center_code;
$this->paper_id = $paper_id;
$this->title = $title;
}
public function run(){
echo " Retrieving paper attendance ".$this->center_code." ".$this->paper_id." ".\Thread::getCurrentThreadId()." ".date("H:i:s:u").PHP_EOL;
$artisan = 'C:/xampp/htdocs/attendance/artisan';
$cmd = "php $artisan attendancereport:center $this->write_folder_name $this->center_code $this->paper_id $this->title";
$return = exec($cmd, $output, $return_var);
echo $return;
}
}
foreach ($centers as $i=>$center){
$center_code = $center->getCenterCode();
$thread = new StatePaperAttendancePDFThread($folder_name, $center_code, $paper_id, $title);
$worker->stack($thread);
}
$worker->start(PTHREADS_INHERIT_ALL^PTHREADS_INHERIT_CLASSES);
$worker->shutdown();
aber wenn ich es von der CLI mit der Zeit gedruckt worden überwachen kann ich, dass keiner der Fäden beginnt zusammen sehen. Sie beginnt mit einigen Sekunden Intervall
Bitte, was mir fehlt
Soweit ich es verstehe, führen Arbeiter die gestapelten 'Threaded' Objects aka Stackables auf einem einzigen Thread aus. Check-out http://stackoverflow.com/questions/15955886/what-is-the-difference-between-thread-object-and-worker-object-php-pthreads. Du brauchst wahrscheinlich entweder einen [Thread/Worker Pool] (http://stackoverflow.com/a/23602185/3828957) oder starte deine Threads wenn möglich mit '$ thread-> start'. Da ich kein konkretes Wissen habe, ist das eher eine Idee und keine Antwort. – makadev
Danke @makadev mit Pool funktioniert nicht für mich Ich bekomme keine Serialisierung Closure, weil ich einige Parameter zu Beginn des Threads übergeben müssen und wir wissen, Pool hat keine Startfunktion –