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

优采云 发布时间: 2021-09-15 18:14

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

  何琪:

  对于一系列收录大量非热门数据且希望被爬行器抓取的页面,在爬行器抓取的高峰期,响应时间将非常高

  前人做过这样一件事:页面被分成三个块,由三个内部接口提供,条目文件是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未在实践中进行测试

  欢迎读者批评指正

  作者:肖帅将军

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线