php curl批处理多线程如何验证

一介屌丝 发布于 2014/03/01 13:15
阅读 271
收藏 0
PHP

我测试了一下curl_multi_init进行curl多线程的操作,设置了3个子进程,子进程超时时间设置为3秒,但是批处理执行完不是3秒而是12秒,60个子进程的情况下,耗时240秒,感觉并没有并发,而是顺序执行的感觉,请问如何验证,怎么处理,当然我所测试的子进程中url都是不可到达的


附添加子进程代码:

public function start() {
        if (!$this->data || !is_array($this->data)) {
            return FALSE;
        }
        $handle = curl_multi_init(); //简历批处理
        foreach ($this->data as $index => $item) {
//            if ($index == 0) {
//                $this->data[$index]['pic_detail_url'] = $item['pic_detail_url'] = 'http://localhost/demo.jpg';
//            }
            $curls[$index] = $this->addHandle($handle, $item['pic_detail_url']);
        }
//        echo $t1 = time();
        $this->execHandle($handle);
//        echo '类' . (time() - $t1) . '秒' . "\n";//内部耗时也没有省时间
        foreach ($this->data as $index => $item) {
            $content = curl_multi_getcontent($curls[$index]);
            writeFile($item, $content, curl_getinfo($curls[$index]));
            curl_multi_remove_handle($handle, $curls[$index]); //释放子句柄
        }
        curl_multi_close($handle); //关闭批处理
    }


    public function addHandle($handle, $url) {
        $curl = curl_init();
        $options = array(
            CURLOPT_URL => $url,
            CURLOPT_TIMEOUT => $this->timeout,
            CURLOPT_RETURNTRANSFER => TRUE,
//            CURLOPT_POST => FALSE,
//            CURLOPT_CONNECTTIMEOUT => 0,
//            CURLOPT_TIMECONDITION => 1,
        );
        curl_setopt_array($curl, $options);
        curl_multi_add_handle($handle, $curl); //添加子句柄到批处理
        return $curl;
    }

另外,curl中就几个时间,这几个有什么区别,百度了一下,感觉有些说的语焉不详,如有参考资料,也可以附上,非常感谢

加载中
返回顶部
顶部

页面底部区域 foot.htm