当前位置: > python爬虫 >

python爬虫之多线程爬虫
栏目分类:python爬虫   发布日期:2019年03月11日 19:30:26   浏览次数:

大家好,我是爱吃苹果的宇文拓。今天我给大家带来的是如何使用多线程来提高爬虫的速度


     我们平时做的爬虫都是单线程的,发起一次url请求是很慢的,如果我们有许多个url请求需要完成,那么我们如果不使用多线程一个接着一个的跑,这样效率很低,计算机的资源完全利用不起来。不过说到这里可能有人会说,在python中多线程是假的。的确如此,在python中有一个GIL锁,它保证每一个时刻只有一个线程在占用cup等计算机资源即只有一个线程在工作。这个现象跟python语音本身没有关系,导致这个结果的是python解释器(cpython),就我目前所知,解决这个问题有两种思路。

  1.更换python解释器如Jpython
  2.利用其它语言来执行相关的代码,这与python是胶水语言的特性有莫大的关系


但是官方推荐我们使用Cpython,那么多线程是不是就没有一点用处了呢?答案肯定是否定的,我想大家都知道并发与并行的概念吧!不知道也没有关系,我在这里解释就行了。
        并发:顾名思义,一起发生,同时发生,比如有两件事事情同时发生。
      并行:即一起执行,即两件事情一起执行。

这两个概念既相似又有区别。一定要搞清楚它们的区别,以及各自表达的意义。搞清楚了并发与并行我们现在就来讲讲在Cpython中多线程的作用。

就拿爬虫来说,假设我们有很多个url地址要请求,在完成一次请求的过程中,肯定会遇到阻塞吧,比如等待服务器返回响应,或者是网络异常等情况。如果我们这是单线程任务,在遇到阻塞的时候,那我们的程序肯定会一直等待吧!这段时间我们的计算机什么也没有做,是不是有点浪费资源呢?但是如果我们用多线程,实现并发,当有一个线程任务阻塞,我们把计算机资源转交个其他线程,这样我们的计算机资源是不是一直在利用呢?所以在python中多线程还是有作用的。始终记住一句话:I/O密集型任务使用多线程,计算密集型任务使用多进程。

接下来我们就来演示在python爬虫中使用多线程。






如图,我们创建了四个线程,然后把它们放入一个列表的数据结构,最后在遍历这个列表,将该线程设置为守护进程,这样做有很大的好处,就是能够在主进程结束后,该线程也会结束。然后我们就调用start方法来启动线程。启动线程后调用join方法 可以将主进程阻塞,主进程在子线程结束后主进程才会结束。运行程序就可以发现一次完成了4个请求。速度比单线程快多了。


总结:我们今天了解了python多线程,以及简单的介绍了并发与并行的概念。最后以爬虫作为例子,演示了如何在爬虫中使用多线程来请求网址。这节内容可能有点难,朋友们要好好理解。不懂的可以自行百度。查阅相关资料。

相关热词:

热门关键词
python字符串
     
python教程 python爬虫 python人工智能 Python+大数据 python问答