curl_multi_exec()是阻塞调用吗?

时间:2013-01-18 02:03:29

标签: php curl libcurl curl-multi

如果PHP中的curl_multi_exec()调用是阻塞或非阻塞调用,那只是好奇。

1 个答案:

答案 0 :(得分:6)

拍摄答案curl_multi_exec() 非阻止


更长的答案curl_multi_exec() 非阻止,但可以使用curl_multi_select 阻止>,阻塞直到任何curl_multi连接上有活动。

修改 目前我正在开发一个爬虫,这是我使用的一段代码的概述。

do {
    $mrc = curl_multi_exec($mh, $active);
    if($to_db_queue->count()>0){
       while($to_db_queue->count()>0)
          //dequeue from queue and insert into database
    }
    else  
      curl_multi_select($mh); //block till state change
} while ($active > 0);

此代码将生成curl_multi_exec,然后将继续在$to_db_queue中排队的数据库工作,否则将调用队列curl_multi_select中的任何内容来阻止循环,直到状态发生更改在curl_multi连接中。

更多例子:
non-blocking
blocking

希望这有助于您理解这个概念。