python解释器/多线程程序

Python解释器

一、定义

Python解释器 :就是专门用来翻译并执行Python代码 的程序,把你写的.py源代码,逐行翻译成电脑能看懂的机器语言,再运行。

二、工作流程

  1. 写代码:print("hello") 人类能看懂
  2. 解释器逐行读取代码
  3. 翻译成字节码
  4. 交给操作系统/CPU执行
  5. 输出结果

三、和编译器最大区别

  • 解释器(Python)边翻译边执行,逐行跑,不用整体编译
  • 编译器(C/C++)全部翻译完再一次性运行,先生成exe程序

四、最主流3种Python解释器

  1. CPython(默认自带)
    • C语言写的,官方原版
    • 自带GIL全局解释器锁,日常99%人都用它
  2. PyPy
    • 速度极快,JIT即时编译
    • 适合CPU密集计算,速度碾压CPython
  3. Jython / IronPython
    • 对接Java、C#生态,几乎很少用

五、你平时怎么用解释器

  1. 终端输入 python test.py
    → 调用CPython解释器运行脚本
  2. IDE(PyCharm、VSCode)运行代码
    → 底层还是调用本地Python解释器

六、通俗比喻

  • 你写的Python代码 = 外文演讲稿
  • Python解释器 = 同声翻译
  • 电脑 = 听不懂外语的听众
    翻译一句,听众听一句,这就是解释执行

七、面试极简背诵

Python解释器是执行Python代码的核心程序,负责将源代码逐行解析执行;

默认使用CPython ,由C语言开发,存在GIL锁

它属于解释型执行,边解析边运行,无需提前编译。




多线程程序

一、基础概念

  1. 进程:操作系统独立资源单位,一个运行起来的软件就是一个进程(如微信、浏览器),独占内存、CPU资源。
  2. 线程进程里最小执行单元,一个进程里可以分出多个线程,共享进程资源。
  3. 多线程程序一个程序内部,同时开启多条执行线路,一起干活

二、形象比喻

  • 进程 = 一间工厂
  • 线程 = 工厂里的工人
  • 单线程:只有1个工人干活,干完一件再干一件
  • 多线程:同时叫来多个工人一起分工干活,提升效率

三、核心特点

  1. 资源共享
    同一进程下所有线程共享全局变量、内存、文件资源,通信简单。
  2. 切换快、开销小
    创建线程比创建进程轻量很多,占用资源极少。
  3. CPython受GIL限制
    同一时刻只有一个线程真正执行代码 ,只能并发 ,不能多核并行
  4. 存在线程安全问题
    多线程同时修改同一个共享数据,容易出现数据错乱,需要手动加锁。

四、适用场景

适合用多线程

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。

七、线程常见问题

  1. 线程死锁:互相等待对方锁,程序卡住不动
  2. 数据争抢:多线程改同一变量结果出错
  3. 主线程提前退出:子线程还没跑完程序结束
  4. 守护线程:主线程退出,守护线程直接跟着结束

八、面试一句话总结

多线程就是在同一个进程内开启多个执行分支,共享进程资源,轻量高效;

受Python GIL限制无法多核并行,适合IO阻塞类任务,操作共享数据必须加锁保证安全。

极简口诀

多线程同屋干活,共享资源易乱;
IO阻塞随便用,计算任务别乱用。

相关推荐
星越华夏4 小时前
msvcrt库在pycharm中运行监控键盘操作无效解决办法
ide·python·pycharm
甲方大人请饶命4 小时前
Java-面向对象进阶之接口与内部类
java·开发语言·servlet
阿正的梦工坊4 小时前
Kotlin 中的 ?. 和 . 语法详解
开发语言·python·kotlin
2401_850491654 小时前
Bootstrap和OpenLayers结合开发的示例
jvm·数据库·python
Gerardisite4 小时前
企业微信自动拉群方案:API自动化怎么做?
python·机器人·自动化·企业微信
Wy_编程4 小时前
go语言中的Channel
开发语言·golang
我是唐青枫4 小时前
C#.NET YARP 跨域配置详解:网关统一处理 CORS
开发语言·c#·.net
风流 少年4 小时前
Python数据类型:类class、反射dataclasses、functools、typing、pydantic
开发语言·windows·python
lzhdim4 小时前
C#性能优化技巧
开发语言·性能优化·c#