爬虫程序的优化

维护人员近期反应我写的爬取某网站数据的程序执行比较慢,看了一下运行爬虫的机器的状态,磁盘IO 100%了,于是想优化一下,减少磁盘IO,关于减少磁盘IO的最容易想到的方法就是内存缓冲区,我原来的程序设计的是每抓一条数据都会插入数据库或者更新数据库对应的数据,由于资源有限,数据库和爬虫程序都放在了一台机器上(更坑爹的是机器还很烂),多个城市的爬虫程序一起执行的话,磁盘的IO明显就捉急了。具体的方案:

用一个LIST数组用来缓冲爬取的数据,暂定缓冲1000条数据(具体应该缓冲多少再一次提交能达到最佳性能这个就需要测试了),缓冲区满了就一次性提交给数据库去处理(拷贝该LIST单独开一个线程去提交数据库同时清除缓冲LIST重新接受新数据?还是在当前线程中提交缓冲LIST给数据库处理等处理完后再清除缓冲LIST继续接受后续数据?前者占用更多的内存但提高了效率,后者则反之,先用后者把。),待数据库处理完后,list.clear()清楚掉缓冲区的数据,准备接受后面的数据。这样1000条数据就出发一次磁盘IO,比原来的每一条数据触发一次磁盘IO的效率应该会高不少。

总结:以前总是会去考虑内存的不足,以后也应该考虑考虑磁盘IO资源的紧张了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值