php多线程抓取网页(批量调用过程如下:一系列数量很大数据(一)_官方手册)

优采云 发布时间: 2021-12-08 05:19

  php多线程抓取网页(批量调用过程如下:一系列数量很大数据(一)_官方手册)

  从哪儿开始:

  一系列数据量大、不热、希望被大量蜘蛛爬取的页面,在爬虫高峰期会有非常高的响应时间。

  前辈做过这样的事情:将页面分成3个块,提供3个内部接口,入口文件使用curl_multi_*系列函数抓取3个内部接口的内容,放在一起成为一个页面。

  怀疑这可能会影响性能。

  是通过学习来分析的。

  看了php官方手册,批量调用过程总结如下:

  curl_multi_init—返回一个新的 curl 批处理句柄作为 curl_init 生成的单个 curl 句柄的容器

  curl_multi_add_handle - 向 curl 批处理会话添加单个 curl 句柄。

  curl_multi_exec—运行当前cURL句柄的子连接,curl_multi_select()的值

  curl_multi_select—等待 curl 批处理中的所有活动连接

  curl_multi_getcontent——如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出文本流

  curl_multi_remove_handle—删除curl批处理句柄资源中的句柄资源

  curl_multi_close—关闭一组 cURL 句柄

  取PHP官网的示例代码:

  疑惑和想法:

  1.批量请求的原理

  PHP没有多线程,是通过操作系统的多线程来实现的(看网上)

  2. 批量请求是基于操作系统的多线程机制,理论上会消耗大量机器的cpu

  一种。开发机上验证,大批量请求时cpu调用确实会急剧上升

  湾 对比线上前端机的负载情况和页面响应时间加长的时间点,发现线上前端机的负载并没有明显增加(维持在0.3左右)

  C。我在网上看到有人curl_multi_select()的返回值不是-1时(表示一个请求没有被处理过) usleep(100), sleep 避免不读取处理状态造成不必要的cpu​​压力.

  注意:

  2中的a和b存在矛盾,目前还没有找到根本原因

  2中的c没有实际测试过

  欢迎广大读者批评指正

  作者:小帅将军

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线