php curl 句柄 复用,PHP-curl multi批处理CPU负载过高的解决办法
之前写了个监测的脚本,利用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负载过高的解决办法相关推荐
- 用php批处理图片,PHP中使用CURL发送get/post请求上传图片批处理功能
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...
- php curl post上传图片,PHP中使用CURL发送get/post请求上传图片批处理功能
cURL是利用url语法规定传输文件和数据的工具.php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传. 在php中建立curl的基本步骤如下: 1.初始化 2. ...
- php 循环curl,PHP实现的curl批量请求操作示例
本文实例讲述了PHP实现的curl批量请求操作.分享给大家供大家参考,具体如下: $ch = array(); $res = array(); $conn = array(); $urls = arr ...
- php curl 防止采集,php多线程采集网页的解决办法 curl多线程采集
一直在使用thinkphp做项目,同样也经常进行采集!而对于物联卡来说,就更要大量的采集运营商提供的API信息,平时使用PHP单线程curl采集多个网页的时候速度特别慢,尤其是采集几十个接口的时候(电 ...
- php curl 使用方法,php curl使用方法与步骤
本书特别新手的一点,是将重要操作的核心思路都为大家提供了.在数据库.图片.文件上传我们都把真正的步骤.以及步骤如何组何成为我们的代码和实现过程都做过讲解. 我们将curl的步骤分为以下7步: 1.初使 ...
- php安装和开启curl扩展,php开启curl扩展
配置方法: 1.拷贝PHP目录中的libeay32.dll 和 ssleay32.dll 两个文件到 system32 目录. 2.修改php.ini:配置好 extension_dir ,去掉 ex ...
- curl: (25) Failed FTP upload: 550 解决办法
问题描述 今天使用 curl 调用ftp上传文件抛出一下错误 sam@sam-hp-z238:~$ curl -T /home/sam/myinstall ftp://192.168.2.48/cam ...
- linux curl https报错: curl: (35) SSL connect error
由于业务需要,需要增加一台web服务器,配置好web环境后,研发测试发现curl https报错: curl: (35) SSL connect error ; 看了下线上在跑的服务器的curl版本: ...
- 服务器支持curl,互联网要点:服务器不支持curl_exec的解决办法
当下应该属于互联网时代吧今天小编分享一篇有关于服务器不支持curl_exec的解决办法,相信小伙伴们对这个话题应该也很关注吧,那么现在就为小伙伴们说说服务器不支持curl_exec的解决办法,小编也收 ...
最新文章
- This Handler class should be static or leaks might occur(null) 解决办法 (转)
- 谈谈环保问题之四-做环保的程序员
- Centos7 systemctl使用
- Linux 内核编码风格【转】
- mybatis中#{}和${}的区别及order by的sql注入问题
- Atitit 代码要写的漂亮 老板要的是效率 冲怎么办突 目录 1. 代码要写高效,写漂亮,要考虑可扩展性和安全性,到了公司才发现老板要的是效率,不在乎你的代码写的是否高效,安全,是否具有可扩展性
- 传智播客ajax视频教程 百度云,传智播客AJAX视频资料分享
- linux学习—— CentOS命令行版下创建KVM虚拟机(VM)并添加SR-IOV的虚拟网卡(VF)
- 易灵思FPGA-软件Efinity和Modelsim联仿设置
- 盘点关于程序员的那些经典案例
- 书摘---创业36条军规4:如何组建公司
- IPFS未来展望,迎接Web3.0新潮流
- PDFBox实现图片转PDF --JAVA
- Python实现数据分析(八)数据清洗(DataClean)
- 基于微信小程序的设备报修系统源码
- Mysql 8.0 --MGR多主+Atlas代理(提一下Mysql-router代理)
- com.android.backupconfirm,使用ADB停用一些自己讨厌的东西记录备忘
- 支付宝扫码验签实例php,PHP 支付宝支付,支付宝回调
- php最快的学习路线
- Android 8.0 系统中添加护眼模式
热门文章
- 短线王的盯盘宝怎么样_2022考研英语韦林全程班怎么样?资源分享
- c#endread怎么打印出来_c# – Socket.EndRead 0字节意味着断开连接?
- 算法导论学习笔记 第2章 算法基础
- 牛逼!Python常用数据类型的基本操作(长文系列第①篇)
- BD云20MB/s不限速,随时下架!
- 开放下载!复旦大学邱锡鹏教授发布教科书《神经网络与深度学习》
- html %3c 不给转义,八个无法利用XSS漏洞的场景
- powerbi使用说明_PowerBI-Cli 工具使用指南
- python网页交互引擎_【Kivy Python UI 框架】模板化交互界面引擎
- 安规电容能用什么代替_电容系列之安规电容