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 代码仍然是单线程的,这意味着它将等待 curl 完成,然后您才能对所有下载采取行动。

The closest thing PHP has to threading are the process control functions.: http://www.php.net/manual/en/book.pcntl.php

于 2011-06-28T18:00:44.603 回答