一、GIL(全局解释器锁)的问题:
1.什么是GIL:
(1).Python语言和GIL没有半毛钱关系。仅仅是由于历史原因在Cpython虚拟机(解释器),难以移除GIL。
(2).GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。
(3).线程释放GIL锁的情况: 在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或Python 2.x,tickets计数达到100
(4).Python使用多进程是可以利用多核的CPU资源的。
(5).多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁
2.怎样解决GIL问题:
(1).重新设计一个不带GIL的解释器
(2).使用进程来完成多任务
(3).通过C语言的扩展,C语言里的解释器没有问题,可以调用C的解释器来处理多线程
二、面向对象的三大特征是什么?
封装、继承、多态。
1.封装的概念及特点?
封装:顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。 对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。
封装成类的好处:一个是保护隐私,一个是降低程序复杂度,使代码划分更清晰,不需要重复造轮子,封装好了可以直接使用,而不需要重复编写
2.继承的好处:
(1)能够提升代码的重用率,即开发一个类,可以在多个子功能中直接使用
(2)继承能够有效的进行代码的管理,当某个类有问题只要修改这个类就行,而其继承这个类的子类往往不需要就修改
3.多态的特点:
在对象中,一个相同的方法,由于对象的不同,可以得到不同的结果。提升代码的重用率。