0

次の 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();
    }

これは、使用と呼ばれます。

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

私が持っているscript.phpの中に:

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

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

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

script.php 内のコンテンツを取得して、ロード時に親スクリプトに表示する方法はありますか?

4

1 に答える 1

0

Curl は複数の URL をダウンロードする際に複数のスレッドで実行されていますが、PHP コードはまだシングル スレッドです。

PHP がスレッド化に最も近いものは、プロセス制御関数です。: http://www.php.net/manual/en/book.pcntl.php

于 2011-06-28T18:00:44.603 に答える