Python多线程在爬虫中的应用

发表于:2019-10-21 10:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:咖啡猫    来源:51Testing软件测试网原创

  题记:作为测试工程师经常需要解决测试数据来源的问题,解决思路无非是三种:1.直接从生产环境拷贝真实数据 2.从互联网上爬取数据 3.自己用脚本或者工具造数据。前段时间,为了获取更多的测试数据,笔者就做了一个从互联网上爬取数据的爬虫程序,虽然功能上基本满足项目的需求,但是爬取的效率还是不太高。作为一个精益求精的测试工程师,决定研究一下多线程在爬虫领域的应用,以提高爬虫的效率。
  一、为什么需要多线程
  凡事知其然也要知其所以然。在了解多线程的相关知识之前,我们先来看看为什么需要多线程。打个比方吧,你要搬家了,单线程就类似于请了一个搬家工人,他一个人负责打包、搬运、开车、卸货等一系列操作流程,这个工作效率可想而知是很慢的;而多线程就相当于请了四个搬家工人,甲打包完交给已搬运到车上,然后丙开车送往目的地,最后由丁来卸货。
  由此可见多线程的好处就是高效、可以充分利用资源,坏处就是各个线程之间要相互协调,否则容易乱套(类似于一个和尚挑水喝、两个和尚抬水喝、三个和尚没水喝的窘境)。所以为了提高爬虫效率,我们在使用多线程时要格外注意多线程的管理问题。
  二、多线程的基本知识
  进程:由程序,数据集,进程控制块三部分组成,它是程序在数据集上的一次运行过程。如果同一段程序在某个数据集上运行了两次,那就是开启了两个进程。进程是资源管理的基本单位。在操作系统中,每个进程有一个地址空间,而且默认就有一个控制进程。
  线程:是进程的一个实体,是CPU调度和分派的基本单位,也是最小的执行单位。它的出现降低了上下文切换的消耗,提高了系统的并发性,并克服了一个进程只能干一件事的缺陷。线程由进程来管理,多个线程共享父进程的资源空间。
  进程和线程的关系:
  一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  CPU分给线程,即真正在CPU上运行的是线程。
  线程的工作方式:
  如下图所示,串行指线程一个个地在CPU上执行;并行是在多个CPU上运行多个线程;而并发是一种“伪并行”,一个CPU同一时刻只能执行一个任务,把CPU的时间分片,一个线程只占用一个很短的时间片,然后各个线程轮流,由于时间片很短所以在用户看来所有线程都是“同时”的。并发也是大多数单CPU多线程的实际运行方式。
  进程的工作状态:
  一个进程有三种状态:运行、阻塞、就绪。三种状态之间的转换关系如下图所示:运行态的进程可能由于等待输入而主动进入阻塞状态,也可能由于调度程序选择其他进程而被动进入就绪状态(一般是分给它的CPU时间到了);阻塞状态的进程由于等到了有效的输入而进入就绪状态;就绪状态的进程因为调度程序再次选择了它而再次进入运行状态。


  ......
查看更多精彩内容,请点击下载:

版权声明:本文出自《51测试天地》第五十五期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号