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阻塞随便用,计算任务别乱用。

相关推荐
神仙别闹5 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
Y幽谷客5 小时前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
伞伞悦读5 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人5 小时前
Windows删除图标缓存
windows·python·pyqt
qq_5470261796 小时前
Python 变量和简单数据类型
python
智搜广告7 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud8 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949658 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng8 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
m0_734571768 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g