之前写了个监测的脚本,利用curl的多线程方式来读取,结果导致CPU占用过高,经过查找,找到可以降低CPU负载的方法,如下:

/**

* cURL multi批量处理

*

* @author mckee

* @link http://www.phpddt.com

*

*/

$url_array = array(

'http://www.phpddt.com/',

'http://www.phpddt.com/php/627.html',

'http://www.phpddt.com/php/258.html'

);

$handles = $contents = array();

//初始化curl multi对象

$mh = curl_multi_init();

//添加curl 批处理会话

foreach($url_array as $key => $url){

$handles[$key] = curl_init($url);

curl_setopt($handles[$key], CURLOPT_SSL_VERIFYPEER, false); //https支持

curl_setopt($handles[$key], CURLOPT_SSL_VERIFYHOST, false); //https支持

curl_setopt($handles[$key], CURLOPT_RETURNTRANSFER, 1);

curl_setopt($handles[$key], CURLOPT_TIMEOUT, 10);

curl_multi_add_handle($mh, $handles[$key]);

}

//======================执行批处理句柄=================================

$active = null;

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active and $mrc == CURLM_OK) {

if(curl_multi_select($mh) === -1){

usleep(100);

}

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

}

//====================================================================

//获取批处理内容

foreach($handles as $i => $ch){

$content = curl_multi_getcontent($ch);

$contents[$i] = curl_errno($ch) == 0 ? $content : '';

}

//移除批处理句柄

foreach($handles as $ch){

curl_multi_remove_handle($mh, $ch);

}

//关闭批处理句柄

curl_multi_close($mh);

print_r($contents);

上面这段程序重点是执行批处理的那段,普通的处理:

do { $n=curl_multi_exec($mh,$active); } while ($active);

会造成CPU Loading过高,因为$active要等全部url数据接受完毕才变成false,所以这里用到了curl_multi_exec的返回值判断是否还有数据,当有数据的时候就不停调用curl_multi_exec,没有执行数据就会sleep,如此就会避免CPU Loading 100%了。

php curl 句柄 复用,PHP-curl multi批处理CPU负载过高的解决办法相关推荐

  1. 用php批处理图片,PHP中使用CURL发送get/post请求上传图片批处理功能

    cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...

  2. php curl post上传图片,PHP中使用CURL发送get/post请求上传图片批处理功能

    cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get   post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...

  3. php 循环curl,PHP实现的curl批量请求操作示例

    本文实例讲述了PHP实现的curl批量请求操作.分享给大家供大家参考,具体如下: $ch = array(); $res = array(); $conn = array(); $urls = arr ...

  4. php curl 防止采集,php多线程采集网页的解决办法 curl多线程采集

    一直在使用thinkphp做项目,同样也经常进行采集!而对于物联卡来说,就更要大量的采集运营商提供的API信息,平时使用PHP单线程curl采集多个网页的时候速度特别慢,尤其是采集几十个接口的时候(电 ...

  5. php curl 使用方法,php curl使用方法与步骤

    本书特别新手的一点,是将重要操作的核心思路都为大家提供了.在数据库.图片.文件上传我们都把真正的步骤.以及步骤如何组何成为我们的代码和实现过程都做过讲解. 我们将curl的步骤分为以下7步: 1.初使 ...

  6. php安装和开启curl扩展,php开启curl扩展

    配置方法: 1.拷贝PHP目录中的libeay32.dll 和 ssleay32.dll 两个文件到 system32 目录. 2.修改php.ini:配置好 extension_dir ,去掉 ex ...

  7. curl: (25) Failed FTP upload: 550 解决办法

    问题描述 今天使用 curl 调用ftp上传文件抛出一下错误 sam@sam-hp-z238:~$ curl -T /home/sam/myinstall ftp://192.168.2.48/cam ...

  8. linux curl https报错: curl: (35) SSL connect error

    由于业务需要,需要增加一台web服务器,配置好web环境后,研发测试发现curl https报错: curl: (35) SSL connect error ; 看了下线上在跑的服务器的curl版本: ...

  9. 服务器支持curl,互联网要点:服务器不支持curl_exec的解决办法

    当下应该属于互联网时代吧今天小编分享一篇有关于服务器不支持curl_exec的解决办法,相信小伙伴们对这个话题应该也很关注吧,那么现在就为小伙伴们说说服务器不支持curl_exec的解决办法,小编也收 ...

最新文章

  1. This Handler class should be static or leaks might occur(null) 解决办法 (转)
  2. 谈谈环保问题之四-做环保的程序员
  3. Centos7 systemctl使用
  4. Linux 内核编码风格【转】
  5. mybatis中#{}和${}的区别及order by的sql注入问题
  6. Atitit 代码要写的漂亮 老板要的是效率 冲怎么办突 目录 1. 代码要写高效,写漂亮,要考虑可扩展性和安全性,到了公司才发现老板要的是效率,不在乎你的代码写的是否高效,安全,是否具有可扩展性
  7. 传智播客ajax视频教程 百度云,传智播客AJAX视频资料分享
  8. linux学习—— CentOS命令行版下创建KVM虚拟机(VM)并添加SR-IOV的虚拟网卡(VF)
  9. 易灵思FPGA-软件Efinity和Modelsim联仿设置
  10. 盘点关于程序员的那些经典案例
  11. 书摘---创业36条军规4:如何组建公司
  12. IPFS未来展望,迎接Web3.0新潮流
  13. PDFBox实现图片转PDF --JAVA
  14. Python实现数据分析(八)数据清洗(DataClean)
  15. 基于微信小程序的设备报修系统源码
  16. Mysql 8.0 --MGR多主+Atlas代理(提一下Mysql-router代理)
  17. com.android.backupconfirm,使用ADB停用一些自己讨厌的东西记录备忘
  18. 支付宝扫码验签实例php,PHP 支付宝支付,支付宝回调
  19. php最快的学习路线
  20. Android 8.0 系统中添加护眼模式

热门文章

  1. 短线王的盯盘宝怎么样_2022考研英语韦林全程班怎么样?资源分享
  2. c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?
  3. 算法导论学习笔记 第2章 算法基础
  4. 牛逼!Python常用数据类型的基本操作(长文系列第①篇)
  5. BD云20MB/s不限速,随时下架!
  6. 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
  7. html %3c 不给转义,八个无法利用XSS漏洞的场景
  8. powerbi使用说明_PowerBI-Cli 工具使用指南
  9. python网页交互引擎_【Kivy Python UI 框架】模板化交互界面引擎
  10. 安规电容能用什么代替_电容系列之安规电容