Python解释器
一、定义
Python解释器 :就是专门用来翻译并执行Python代码 的程序,把你写的.py源代码,逐行翻译成电脑能看懂的机器语言,再运行。
二、工作流程
- 写代码:
print("hello")人类能看懂 - 解释器逐行读取代码
- 翻译成字节码
- 交给操作系统/CPU执行
- 输出结果
三、和编译器最大区别
- 解释器(Python) :边翻译边执行,逐行跑,不用整体编译
- 编译器(C/C++) :全部翻译完再一次性运行,先生成exe程序
四、最主流3种Python解释器
- CPython(默认自带)
- C语言写的,官方原版
- 自带GIL全局解释器锁,日常99%人都用它
- PyPy
- 速度极快,JIT即时编译
- 适合CPU密集计算,速度碾压CPython
- Jython / IronPython
- 对接Java、C#生态,几乎很少用
五、你平时怎么用解释器
- 终端输入
python test.py
→ 调用CPython解释器运行脚本 - IDE(PyCharm、VSCode)运行代码
→ 底层还是调用本地Python解释器
六、通俗比喻
- 你写的Python代码 = 外文演讲稿
- Python解释器 = 同声翻译
- 电脑 = 听不懂外语的听众
翻译一句,听众听一句,这就是解释执行。
七、面试极简背诵
Python解释器是执行Python代码的核心程序,负责将源代码逐行解析执行;
默认使用CPython ,由C语言开发,存在GIL锁 ;
它属于解释型执行,边解析边运行,无需提前编译。
多线程程序
一、基础概念
- 进程:操作系统独立资源单位,一个运行起来的软件就是一个进程(如微信、浏览器),独占内存、CPU资源。
- 线程 :进程里最小执行单元,一个进程里可以分出多个线程,共享进程资源。
- 多线程程序 :一个程序内部,同时开启多条执行线路,一起干活。
二、形象比喻
- 进程 = 一间工厂
- 线程 = 工厂里的工人
- 单线程:只有1个工人干活,干完一件再干一件
- 多线程:同时叫来多个工人一起分工干活,提升效率
三、核心特点
- 资源共享
同一进程下所有线程共享全局变量、内存、文件资源,通信简单。 - 切换快、开销小
创建线程比创建进程轻量很多,占用资源极少。 - CPython受GIL限制
同一时刻只有一个线程真正执行代码 ,只能并发 ,不能多核并行。 - 存在线程安全问题
多线程同时修改同一个共享数据,容易出现数据错乱,需要手动加锁。
四、适用场景
适合用多线程
IO密集型任务
- 网络请求、接口爬取
- 文件读写、数据库等待
- 休眠、阻塞等待
线程阻塞会释放GIL,其他线程立刻运行,效率大幅提升。
不适合多线程
CPU密集型计算
大量循环、数值运算、数据分析
GIL一直占用,无法利用多核,多线程反而变慢,改用多进程。
五、单线程 vs 多线程
- 单线程:顺序执行,串行运行,简单安全,速度慢
- 多线程:交替并发执行,阻塞时自动切换,IO场景提速明显
六、简单代码示例
python
import threading
import time
def work(name):
for i in range(3):
print(f"线程{name}执行{i}")
time.sleep(1)
if __name__ == "__main__":
t1 = threading.Thread(target=work, args=("A",))
t2 = threading.Thread(target=work, args=("B",))
t1.start()
t2.start()
两条线程同时交替运行,不是顺序跑完A再跑B。
七、线程常见问题
- 线程死锁:互相等待对方锁,程序卡住不动
- 数据争抢:多线程改同一变量结果出错
- 主线程提前退出:子线程还没跑完程序结束
- 守护线程:主线程退出,守护线程直接跟着结束
八、面试一句话总结
多线程就是在同一个进程内开启多个执行分支,共享进程资源,轻量高效;
受Python GIL限制无法多核并行,适合IO阻塞类任务,操作共享数据必须加锁保证安全。
极简口诀
多线程同屋干活,共享资源易乱;
IO阻塞随便用,计算任务别乱用。