2
私は、スレッドを管理するためにワーカーを使用してマルチスレッドを使用することに頼っていたので、PHPでプロセスを改善しています。しかし、作業者のスレッドは、同時に実行されないスレッドを順番に実行します。PHP - PTHREADワーカースレッドが同時に実行されていません
これは私のサンプルコード
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();
ですが、私は時間を使用してCLIからそれを監視するとき、私は、スレッドのどれもが一緒に起動しないことがわかります印刷されて。彼らはすべて私は以下のようにカスタマイズされたスレッドプールエグゼキュータを作成することで、私の問題を解決することができた私は
私が理解する限り、ワーカーはスタックされた 'Threaded'オブジェクト(Stackable)を1つのスレッドで実行します。 f.eを参照してください。 http://stackoverflow.com/questions/15955886/what-is-the-difference-between-thread-object-and-worker-object-php-pthreads。可能であれば、[Thread/Worker Pool](http://stackoverflow.com/a/23602185/3828957)か、スレッドを '$ thread-> start'で起動する必要があります。私は具体的な知識を持っていないので、これはもっとアイデアで答えはありません。 – makadev
ありがとう@makadevプールを使用して私のために動作しません私はスレッドの開始にいくつかのパラメータを渡す必要があり、プールは開始機能を持っていない –