pthreadを使用してPHPでマルチスレッドを実装しようとしています。 私がやってみたいのは、たくさんの行がある50のCSVファイルがあります。いくつかのバリデーション基準をチェックした後、各行を読み込んでデータベースに挿入する必要があります。そのため、一度に1つのファイルを読み込む代わりに、同時に5つの異なるファイルを同時に処理する5つの複数のスレッドを作成する必要があります。いずれかのスレッドが最初に完了すると、次のキューに入れられたファイルがそのスレッドに参加します。PHPを使用して複数のCSVファイルを同時に読み取る(マルチスレッド)Pthread
たとえば、私は1X.CSVを50X.CSVに持っています 5X.CSVを処理するために5つのスレッドを開始します。現在、3X.CSVは他の4つのファイルと比較して非常に小さいです。その処理が最初に完了します。 3番目のスレッドは空きになり、次のキューに入れられたファイル、つまり6X.CSVが検索されます。各スレッドは個別に動作します。
私の問題は、ファイルを読み取らずにマルチスレッドを行っているときに、うまくいきます!しかし、fopen()はrun()関数でファイルを読むのには役に立たない。私がどこに間違っているのか誰にでも教えてくれますか?以下は私のコードです。どんな助けも高く評価されます。
class AsyncLongAction extends Thread
{
public function __construct($s,$file)
{
$this->s = $s;
$this->file = $file;
//echo $file."<BR>";
}
public function run()
{
if($this->s)
{
printf("TID: %s is waiting for %s %s ...\n", $this->getCurrentThreadId(), $this->s, $this->file);
//sleep($this->s);
printf("%ss is over.\n<br>", $this->s);
$handle = fopen($this->file,"r");
echo $handle; //It is not giving any result.
while(($filesop = fgetcsv($handle,1000,",")) != false)
{
$name = $filesop[0];
$times = time();
$sql = "<BR>".$name."---".$times."======".Thread::getCurrentThreadId();
echo $sql;
}
fclose($handle);
}
}
}
$thread = array();
$files = glob("CSV/*"); // path is right, I have tried working with the same code without using pthread.
foreach($files as $key=>$file)
{
$thread[] = new AsyncLongAction($key+1,$file);
}
$c= 0;
foreach($thread as $st)
{
if($c < 3)
$st->start();
$st->join();
$c++;
}
'$ this-> file'をエコーしようとしました。スレッド内の' fopen'関数内で 'file'を取得していないようです。 –
既に試しました。それはそこを超えています! –