Python爬虫成长之路:多线程京东图片爬虫实例

我们使用Python爬虫爬取网站的内容的时候,爬虫的流程是依次进行的,是一种单线程结构,单线程结构的爬虫称为单线程爬虫。

Python单线程的劣势也比较明显,就是比较慢,因为是依次支持。那这时候,Python多线程爬虫就非常有必要了,Python多线程爬虫中某部分程序可以并行执行,即多线程结构的执行流程称为多线程爬虫。

Python爬虫成长之路:多线程京东图片爬虫实例


简单多线程爬虫

下面写一个简单的流程代码,代码如下:

<code>#python中可以通过导入threading模块来使用多线程
import threading

#定义类并继承threading.Thread类,则该类就是一个线程
#定义线程A
class Thread_A(threading.Thread):

def _init_(self):#初始化线程
threading.Thread._init_(self)

def run(self):#线程A需要做的事
pass

#示例
a1=Thread_A () #实例化线程A
a1.start() #启动线程/<code>

完整多线程京东图片爬虫实例

多线程爬虫呢,重要的主要是先写好爬虫采集部分代码,然后调用多线程部分代码,进行多线程并行执行。

1、采集部分核心代码,采集保存图片:

Python爬虫成长之路:多线程京东图片爬虫实例

2、执行多线程部分代码:

Python爬虫成长之路:多线程京东图片爬虫实例

好了,最终爬虫的效果:

Python爬虫成长之路:多线程京东图片爬虫实例

如果是多个多线程运行,这样会频繁的线程创建,销毁线程,是非常浪费资源的,所以我们应该把他们放到一个容器里面去统一管理,比如队列,线程池容器等。

另外,在Python中的互斥锁:GIL 锁。用来控制线程执行权限的,线程需要执行的时候,要先获得 GIL 之后才可以执行,这样就不会产生线程安全问题。

Python 进程中,GIL 只有一个。拿不到通行证的线程,就不允许进入 CPU 执行。

so:

在 Python 中,无论是单核还是多核,都同时只能有一个线程在执行。其根源就是因为 GIL 锁的存在。

相比python,其他语言(比如java)CPU 是多核时是支持多个线程同时执行。尴尬了。


分享到:


相關文章: