php多线程抓取网页(批量调用过程如下:一系列数量很大数据(一)_官方手册)
优采云 发布时间: 2021-09-15 18:14php多线程抓取网页(批量调用过程如下:一系列数量很大数据(一)_官方手册)
何琪:
对于一系列收录大量非热门数据且希望被爬行器抓取的页面,在爬行器抓取的高峰期,响应时间将非常高
前人做过这样一件事:页面被分成三个块,由三个内部接口提供,条目文件是curl_uuu_uu*一系列函数获取三个内部接口的内容,并将它们组装成一个页面
这可能会影响性能
所以学习和分析
阅读官方PHP手册后,批处理调用过程总结如下:
curl\uuu multi\uu Init-返回一个新的curl批处理句柄,作为Init生成的单个curl句柄的curl\uu容器
curl\uumulti\uuadd\uhandle-向curl批处理会话添加单独的curl句柄
curl\uumulti\uexec-运行当前curl句柄的子连接,select()的curl\umulti\uvalue
curl\uumulti\uuselect-等待所有curl批处理中的活动连接
curl\uumulti\uuGetContent-如果设置了curlopt\uReturnTransfer,则返回获得的输出的文本流
curl\uumulti\uuremove\uhandle-从curl批处理句柄资源中移除句柄资源
curl\uumulti\uclose——关闭一组卷曲控制柄
从PHP官方网站获取示例代码:
疑虑和想法:
1.批量请求的原理
PHP没有多线程。它是在操作系统的多线程帮助下实现的(见Internet)
2.batch请求基于操作系统的多线程机制,理论上会消耗大量CPU
a。在开发机器上验证,当发出大量请求时,CPU调用确实会急剧增加
b。对比在线前端机的负载和页面响应时间延长的时间点,发现在线前端机的负载没有明显增加(维持在0.3(左和右)
c、 当select()的返回值不是-1(表示存在尚未处理的请求)时,我在Internet上看到有人在curl中使用了multi100),休眠以避免由于不读取处理状态而导致不必要的CPU压力
注意:
2中a和B之间存在矛盾,根本原因尚未找到
2中的C未在实践中进行测试
欢迎读者批评指正
作者:肖帅将军