百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[闲聊畅谈] 使用PHP编写多进程并发高效率采集爬虫 [复制链接]
查看:9219 | 回复:28

落伍网友
落伍网友  发表于 2015-8-11 14:21:16 |阅读模式 来自 中国辽宁朝阳
本帖最后由 匿名 于 2015-8-11 21:57 编辑

去年底的时候发过一次,这半年一直在使用中不断改进&完善,现在基本没什么问题了。
===============================================================
演示代码

(程序更新过,mp_msg函数的参数类型改为string,可变数量)

运行效果(图1)
运行效果(图2)
主要封装函数
multi_process();
根据参数,创建指点数目的子进程。
亮点功能1:子进程各种异常退出,比如segment fault, Allowed memory size exhausted等,中断一个子进程后,父进程会重新fork一个新进程顶上去,保持子进程数量。如果子进程里完成任务(比如判断tid达到10000),可以在子进程里exit(9),父进程会收到这个退出状态(9),然后等待所有子进程退出,最后退出自身进程。
亮点功能2:与curl封装函数一起实现了一统计功能,在程序关闭后会显示出一些主要的统计信息(图2的底部)。
mp_counter();
在父进程以及所有子进程之间通信,负责协调分配各子进程的任务,使用了锁机制。可以设置’init’参数重置计数,可以设置每次更新计数的值。
curl_get();
对curl相关函数的封装,加入了大量的错误机制,支持POST,GET,Cookie,Proxy,下载。
mp_msg();
实现规范之一就是,每条任务处理完,只输出一行信息。
亮点功能:这个函数会判断终端的高度和宽度,实现每一屏内容会显示一条统计信息(图1的紫色行),便于观察程序的执行情况,控制每一行输出的长度,保持一条信息不会超过一行。
rand_exit();
众所周知,PHP存在内在泄露的问题,所以每一个子进程里执行一定次数的任务后就退出,由multi_process()负责自动建立新的子进程(如图1中的绿色行)。
程序效率
本次测试使用的是Vultr的最低配置机器,1 CPU(3.6GHz),768MB RAM,美国LA机房(一定程度上影响了抓取速度)。
执行了十多分钟后,统计信息如下:
运行期间内存占用统计(while true; do psmem | grep php;sleep 10; done)如下:
vmstat 1命令结果如下
iftop带宽监控如下:
简单点解释下:
50个子进程,执行11分55秒,抓取50951次,按这个速度计算,一天可以抓取615万次。
所有进程(1父进程+50子进程)共占用内存约60MB,占用CPU约20%(1核心),带宽占用约7-8Mbps。
按上面的性能参数来看,本机再开5倍的子进程数量是可以承受的,但是目标机器承受不了这么大的压力。
不同进程数量的抓取速度对比:
1个进程
10个进程
100个进程
多进程的封装几乎完美,但curl由于它的功能太过于丰**强大,可能永远也无法达到完美。


PS,这帖子就不再更新了,有需要用到的MJJ,可以保存下上面的地址,以后更新会更新上面的BLOG地址。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

383

主题

2215

帖子

7128

积分

落伍者(三羊开泰)

其实我喜欢可爱的

Rank: 3Rank: 3

贡献
2949
鲜花
31
注册时间
2005-8-12

落伍手机绑定

发表于 2015-8-11 14:28:54 | 显示全部楼层 来自 中国江西萍乡
学习~~~
回复

使用道具 举报

459

主题

2万

帖子

1万

积分

落伍者(四季发财)

Rank: 4

贡献
3855
鲜花
48
注册时间
2008-5-30

QQ绑定落伍者落伍手机绑定

发表于 2015-8-11 14:30:41 | 显示全部楼层 来自 中国广东中山
技术大牛。。
回复

使用道具 举报

1695

主题

14万

帖子

1万

积分

落伍者(四季发财)

技术为主

Rank: 4

贡献
641
鲜花
33
注册时间
2007-10-29

落伍手机绑定

发表于 2015-8-11 14:35:56 | 显示全部楼层 来自 中国北京
能自动采集吗
见群龙无首,吉
回复 支持 反对

使用道具 举报

135

主题

4021

帖子

3433

积分

落伍者(两全齐美)

Rank: 2

贡献
529
鲜花
8
注册时间
2011-1-16

落伍手机绑定

发表于 2015-8-11 14:36:11 | 显示全部楼层 来自 中国湖北武汉
这名匿的...
回复

使用道具 举报

841

主题

1459

帖子

970

积分

落伍者(一心一意)

Rank: 1

贡献
137
鲜花
5
注册时间
2012-12-4

落伍手机绑定

发表于 2015-8-11 14:38:47 | 显示全部楼层 来自 中国广东深圳
这么高深的技术 看的我都头晕了
航空障碍灯www.aoblight.com
回复 支持 反对

使用道具 举报

130

主题

1542

帖子

731

积分

落伍者(一心一意)

Rank: 1

贡献
399
鲜花
6
注册时间
2010-9-13

落伍手机绑定

发表于 2015-8-11 15:03:25 | 显示全部楼层 来自 中国陕西西安
楼主是资深phper 受教了!!
回复 支持 反对

使用道具 举报

310

主题

4751

帖子

8383

积分

落伍者(三羊开泰)

Rank: 3Rank: 3

贡献
4800
鲜花
13
注册时间
2004-4-22

QQ绑定落伍手机绑定

发表于 2015-8-11 15:06:00 | 显示全部楼层 来自 中国云南昆明
这么高深的技术 看的我都头晕了
回复 支持 反对

使用道具 举报

9742

主题

5万

帖子

7845

积分

落伍者(三羊开泰)

Rank: 3Rank: 3

贡献
3987
鲜花
65
注册时间
2007-12-29

落伍手机绑定

发表于 2015-8-11 15:13:18 | 显示全部楼层 来自 中国内蒙古呼和浩特
本帖最后由 syxxz 于 2015-8-11 15:20 编辑

楼主居然匿名

易用性和易传播的品牌
免费扫高权重域名:加落伍创业干货群52385364
数字创业资质办理:天津盛世创举
回复 支持 反对

使用道具 举报

174

主题

790

帖子

890

积分

落伍者(一心一意)

Rank: 1

贡献
54
鲜花
5
注册时间
2013-4-19

落伍手机绑定

发表于 2015-8-11 15:28:19 来自落伍手机版 | 显示全部楼层 来自 中国浙江温州
本帖最后由 天下的泪珠 于 2015-8-11 15:33 编辑

这年头发个链接也不容易

谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-11-26 01:45 , Processed in 0.057515 second(s), 32 queries , Gzip On.

返回顶部