首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多线程爬虫

在python中为我们提供了两个多线程模块,thread模块和threading模块。thread模块是比较底层的模块,threading模块是对thread模块的封装,可以更加方便我们使用,所以这里将用到threading模块。

threading模块常用方法和属性

threading.Thread() - 创建一个线程

参数1为线程执行函数

参数2为元组,用于给函数传递参数

threading.start() - 开启线程

threading.join() - 线程阻塞,主线程将等待子线程结束

想要在多线程中共享全局变量,实现线程同步,可以用到python为我们提供的两种方法

互斥锁

互斥锁是python提供的简单实现线程同步的机制,原理就是当一个线程想要使用共享数据时,先将共享数据进行锁定,其他线程不能使用,直到该线程释放资源,其他线程才可再次锁定共享数据。

互斥锁保证了每次只有一个线程使用共享数据,保证了在多线程下共享数据不会发生混乱。

队列

互斥锁只是简单实现同步的机制,不当的使用互斥锁会造成死锁,所以python为我们提供了更方便的机制,那就是使用队列来共享数据,队列是线程安全的

Queue模块是python提供给我们使用队列的模块

爬虫实战

网站地址:https://www.doutula.com/photo/list/?page=

使用python2编写,用到request库负责发送请求,bs4负责解析网页提取数据,urllib.urlretrieve()方法下载图片

因为代码中注释很详细,这里我就不继续讲解了,具体看代码,下面是我基于互斥锁和队列的两个版本代码

互斥锁版:

队列版:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180223G195UK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券