2011-06-28 10 views
0
私はPHPプロセスにマルチスレッドを追加するには、次のCURLマルチスレッドを使用しています

待ちのPHPマルチスレッドの流れを作る方法:代わりに完了

function multithread_it($url,$threads){ 
    $started=0; 
    while ($started<$threads){ 
     $ch[$started] = curl_init(); 
     curl_setopt($ch[$started], CURLOPT_URL, $url); 
     curl_setopt($ch[$started], CURLOPT_HEADER, 0); 
     curl_setopt($ch[$started], CURLOPT_FOLLOWLOCATION, 0); 
     curl_setopt($ch[$started], CURLOPT_RETURNTRANSFER, 0); 
     $started++; 
     } 
    $started=0; 
    $mh = curl_multi_init(); 
    while ($started<$threads){ 
     curl_multi_add_handle($mh,$ch[$started]); 
     $started++; 
     } 
    $started=0; 
    $running=null; 
    do {curl_multi_exec($mh,$running);} while($running > 0); 
    while ($started<$threads){ 
     curl_multi_remove_handle($mh, $ch[$started]); 
     $started++; 
     } 
    curl_multi_close($mh); 
    ob_flush(); 
    flush(); 
    } 

これを使用して呼び出され、例えばscript.phpの内部

multithread_it($script_dir."script.php",10); 

私が持っている:

for($i=0;$i<10;$i++){ 
    echo $i."<br />"; 
    sleep(1); 
    ob_flush(); 
    flush(); 
    } 

しかし、データの屋台。 multithread_itを呼び出すスクリプトは、すべてのスクリプトが完了するまで待ってから、突然画面にジャンプするデータを表示します。

実際に実行するのに約10分かかりますが、flush、ob_flush、および正確な関数で使用されているのとまったく同じ概念とコードを使用するスクリプトのサンプルデータです。

script.phpの内容を親スクリプトに読み込むにはどうすればいいですか?

答えて

0

複数のURLをダウンロードする際にCurlが複数のスレッドで動作していますが、あなたのPHPコードはまだシングルスレッドです。つまり、すべてのダウンロードを処理する前にカールが終了するのを待ちます。

PHPはスレッドしている最も近いものは、プロセス制御機能:返信用http://www.php.net/manual/en/book.pcntl.php

+0

感謝しています。私はこのスクリプトを、過去にjavascript関数を使って流して、親の数値を更新することに成功しました。それは私がそれが長い期間であったので、私がスクリプトに加えた変更についてあまりにも確信していませんが、それが最近働いて停止したばかりです。子プロセスと同じようにデータをフラッシュする方法はありません。私は単純にエコーを使用しています。これらはメインスクリプトにそのまま表示されますが、流れを出す前にすべて待っています。 – Chris

関連する問題