• 新手写的一个多线程网页抓取(可以用但是感觉线程比较假!求高手指点下)

    2016/12/10 刺客 4 评论

数据库设计表语句:

然后采集所使用的IP文本格式:

这只是部分测试要抓取的IP

下面是爬虫代码

我现在正在用这个脚本在跑  但是我用的是一个5M带宽的服务器在跑  但是感觉好慢, 总感觉我写的这个脚本有点问题 ,但是找了半天也没找出来是哪里影响效率了 ,按道理说 我里面设置的是开启的是固定的200线程,应该很快的啊。但是现实总是不是理想那样丰满。望高手指点,可以按照国际惯例红包感谢

1 1 收藏


直接登录
最新评论
  • 小编辑 编辑 2016/12/12

    帮顶,支持分享精神

  • LouisWang 程序员 2016/12/12

    对python研究不深~

    给点我的理解~

    线程不是越多就越快~

    线程越多,可能速度越慢,需要具体问题具体分析。因为线程一多,上下文切换可能很频繁,如果线程实际运行时间比上下文切换都短,这时线程越多反而越慢

    线程数量的设置不能太随意,需要根据CPU核数,任务的性质(IO密集还是计算密集)来具体选择,选择的依据也没有固定的公式,需要凭经验值和实际的测试吧~

    线程越多,风险越大,线程安全和通信都是需要考虑的~

  • 多线程对爬虫有一定作用,但也有一个限度,200个线程单是在线程切换上就花销不小,而且其中一个线程出问题,其他线程也会受影响,更不要说PYTHON多线程的先天缺陷了。

    宽带限制,服务器限制,线程限制,GIL限制等等一堆因素要考虑呢,岂是数据多就能完事的。

  • 霉霉   2016/12/22

    楼主试下用1个线程跑。我怀疑都比现在这个快 :p

    楼主可以考虑用这里的方案来改写下多线程的部分啊,map那个。另外,试试用

     而非threading库来试下哈。
    我觉得这里的抓取没有必要用transaction, 可以把commit(), rollback(), 都去掉,只做异常了不挂掉继续跑的逻辑就好了。
    照理说db这里应该不是瓶颈。但是db毕竟只有一个连接。如果你愿意,可以在12部分没解决的情况下,试下改用db连接池。