php多线程抓取网页(php里提供了一个函数curl_multi_init(组图))

优采云 发布时间: 2022-01-14 08:10

  php多线程抓取网页(php里提供了一个函数curl_multi_init(组图))

  curl_init() 以单线程模式处理事物。如果需要使用多线程模式进行事务处理,那么PHP为我们提供了一个函数curl_multi_init(),就是多线程模式处理事务的函数。

  curl_multi_init() 多线程可以提高网页的处理速度吗?今天我将通过一个实验来验证这个问题。

  我今天的测试很简单,就是抓取网页的内容,需要连续抓取5次,使用curl_init()和curl_multi_init()函数完成,记录两次耗时,并比较得出结论。

  首先,使用 curl_init() 单线程连续抓取网页内容 5 次。

  然后,使用 curl_multi_init() 多线程连续抓取网页内容 5 次。

  为了避免随机性,我测试了5次(通过CTRL+F5强制刷新),数据如下:

  curl_init():

  第一次

  第二次

  第三次

  第四次

  第五次

  平均

  时间(毫秒)

  3724

  3615

  2540

  1957年

  2794

  2926

  curl_multi_init():

  第一次

  第二次

  第三次

  第四次

  第五次

  平均

  时间(毫秒)

  4275

  2912

  3691

  4198

  3891

  3793

  从测试结果来看,我们发现两种方式的耗时相差不大,只有700多毫秒。很多人原本以为多线程会比单线程花更少的时间,但事实并非如此。从数据上看,多线程比单线程花费的时间要多一点。但是对于一些事务来说,多线程处理不一定是追求速度,需要注意。

  关于 curl_multi_init()

  一般来说,考虑使用curl_multi_init()的时候,目的是同时请求多个url,而不是一个一个,否则需要curl_init()。

  但是在使用curl_multi的时候,可能会遇到cpu消耗高、网页假死等现象。可以阅读《PHP使用curl_multi_select解决curl_multi网页假死问题》

  curl_multi的使用步骤总结如下:

  各功能作用说明:

  curl_multi_init()

  初始化 curl 批处理句柄资源。

  curl_multi_add_handle()

  将单独的 curl 句柄资源添加到 curl 批处理会话。curl_multi_add_handle()函数有两个参数,第一个参数代表一个curl批量句柄资源,第二个参数代表单个curl句柄资源。

  curl_multi_exec()

  解析一个curl批处理句柄,curl_multi_exec()函数有两个参数,第一个参数代表一个批处理句柄资源,第二个参数是一个引用值参数,表示剩余的单个curl句柄资源需要处理的数量。

  curl_multi_remove_handle()

  curl_multi_remove_handle()函数有两个参数,第一个参数代表一个curl批处理句柄资源,第二个参数代表一个单独的curl句柄资源。

  curl_multi_close()

  关闭批处理资源。

  curl_multi_getcontent()

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

  curl_multi_info_read()

  获取当前解析的 curl 的相关传输信息。

  原文链接:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线