GIL
GIL的概念
- 1.GIL (Global Interpreter Lock ) 全局解释器锁。
- 2.GIL 不是 Python 语言的特性,是CPython中的一个概念。
- 3.Python 解释器也是一个应用程序
GIL的作用
- 1.线程互斥锁是 Python 代码层面的锁,解决 Python 程序中多线程共享资源的问题
- 2.GIL 是__ Python 解释层面的锁,解决解释器中多个线程的竞争资源问题。
GIL对程序的影响
- 1.由于 GIL 的存在, Python程序中同一时刻有且只有一个线程会执行。
- 2.Python 中的多线程_由于 GIL 锁的存在无法利用多核 CPU
- 3.Python 中的多线程不适合计算密集型的程序。
- 4.GIL 锁在遇到IO等待时,会释放 GIL 锁,可以提高Python_中IO密集型_程序的效率
GIL影响的解决办法
如果程序需要大量的计算,利用多核CPU资源,可以使用多进程来解决
深拷贝和浅拷贝
基本概念
- a.Python中一切皆对象
- b.对象可分为不可变对象和可变对象两种
- c.变量在内存中开辟的地址称为引用
引用赋值
- a.对象间的赋值操作是对地址的引用操作
- b.在不可变对象赋值时,不可变对象不会被修改,而是会新开辟一个空间
- c.在可变对象中赋值时,只是将可变对象中保存的引用进行更改
拷贝
- a.使用 copy 模块完成拷贝
- b.copy模块可以实现浅拷贝和深拷贝两种拷贝
浅拷贝
- a.使用 copy 模块中的 copy 方法
- b.对于不可变对象,浅拷贝和赋值没有区别
- c.对于可变对象,只复制当前对象的第一层引用。
- d.如果可变对象中的对象发生变化 ,拷贝对象也随之变化
深拷贝
- a.使用 copy 模块中的 deepcopy 方法
- b.对于不可变对象,深拷贝和赋值没有区别
- c.对于可变对象,深拷贝会逐层拷贝所有的数据的引用
- d.修改可变对象中的对象数据时,拷贝对象不会随之变化
默认拷贝方式
程序中默认使用浅拷贝
浅拷贝的几种实现形式
- a.copy 模块的 copy 方法
- b.对象本身的 copy 方法
- c.工厂方法
- d.切片
浅拷贝的优势
- a.拷贝时间短
- b.占用空间少
- c.拷贝效率高
模块导入
模块概念
- 1.在 Python 中,一个文件就是一个模块
- 2.将多个文件放在一个文件夹内进行组织管理的形式称为包
模块导入方式
- 1.import
- 2.from-import
使用模块别名
可以使用 as 在导入模块后,为模块添加别名,方便程序中引用
模块搜索顺序
模块在搜索时,根据 sys 模块中定义的 path 变量中保存的路径进行搜索
默认搜索顺序为:
- 1.当前程序所在目录
- 2.当前程序根目录
- 3.PYTHONPATH
- 4.标准库目录
- 5.第三方库目录site-packages目录
添加搜索路径
因为 path 是列表类型,可以使用 append 方法向 path 变量中添加模块搜索路径。
重新加载模块
- 1.模块在导入后,会在 sys.modules 中创建一个模块对象
- 2.如果被导入的模块发生了修改,那么需要重新导入模块
- 3.from imp import reload — reload(xxx) 已不建议使用
- 4.from importlib import reload — reload(xxx)
- 5.重新导入的前提是程序没有结束,如果结束了重新运行就相当于重新导入了。
import 和 from-import 的区别
- 1.可以将 import 导入方式理解成浅拷贝,只是拷贝了模块的一个引用。通过引用可以使用所有的数据。
- 2.from-import方式在导入数据时,会将导入模块中数据复制一份到当前文件中,所以可以直接使用模块中的变量,函数,类等内容。
- 3.使用from-import 方式导入可能会出现命名冲突问题。
- 4.从使用便利的角度,使用from-import
- 5.从命名冲突的角度,使用 import
循环导入
- 1.循环导入不是语法,而是在程序编写过程中的一种逻辑错误
- 2.开发过程中需要避免循环导入
with 上下文管理器
语法糖
- i.Python 提供的一种简化语法,在编写代码时更加简洁
- ii.with 就是众多语法糖中的一种
with 执行原理
- i.能通过with进行执行的语句,都是实现了上下文管理器
- ii.上下文管理器中包含两个魔法方法__enter__ 和__exit__
- iii.__enter__ 方法提供环境的初始化操作
- iv.__exit__ 方法提供了环境的善后操作,一般用来做资源的关闭
__exit__方法中的参数
- i.__exit__ 方法中提供三个参数,用来接收执行with语句时发生的异常。
- ii.三个参数分别为 异常信息类型,异常信息值和异常回溯信息
- iii.__exit__ 方法默认返回 False ,默认将异常信息抛出
- iv.可以设置返回值为 True,不将异常信息抛出