python的伪多线程

Python伪多线程及并行解决方案

Python 的性能瓶颈与多线程并发

1. 为什么说python的多线程是假的?

Python 的解释器(CPython)有一个**全局解释器锁(GIL, Global Interpreter Lock)**机制。
它的作用是:同一时刻只允许一个线程执行 Python 字节码,以保证 Python 内部对象的内存安全。

结果:

  • 在多线程模式下,Python 线程无法实现真正的并行执行(尤其是 CPU 密集型任务)。
  • 这成为 Python 性能的一个重要瓶颈。

2. 真正的并行怎么办?

2.1 多进程(multiprocessing)

  • 使用多进程(multiprocessing),每个进程有自己的 Python 解释器和 GIL。
  • 这样可以实现真正的并行。

2.2 其他 Python 实现–基本别考虑了

  • 使用没有 GIL 的 Python 实现,比如 JythonIronPython
  • 但这些实现的兼容性和生态远不如 CPython。

3. 既然是“假的多线程”,为什么 Python 还要提供多线程?

虽然 CPython 的多线程不能让 CPU 密集型任务并行,但它对I/O 密集型任务非常有用!

  • 当一个线程在等待 I/O(如文件、网络)时,GIL 会被释放,其他线程可以继续执行。
  • 这样可以让程序在 I/O 阻塞时不“傻等”,提升效率。

4. CPython、Jython、IronPython 是什么?(平常用的都是 Python3)

4.1 CPython

  • 最常用的 Python 解释器。
  • 你平时用的 python 命令、Anaconda、PyCharm 里默认的都是 CPython。
  • 用 C 语言实现。
  • 支持绝大多数第三方库(如 numpy、pandas、requests 等)。
  • 有 GIL,多线程不能并行执行 Python 代码。

4.2 Jython

  • 用 Java 实现的 Python 解释器。
  • 可以直接调用 Java 的类库。
  • 没有 GIL,理论上多线程可以并行。
  • 不支持 C 扩展库(如 numpy、pandas),生态远不如 CPython。

4.3 IronPython

  • 用 C# 实现的 Python 解释器。
  • 可以直接调用 .NET 的类库。
  • 没有 GIL,理论上多线程可以并行。
  • 不支持 C 扩展库,生态有限。

总结:
你平时用的几乎肯定是 CPython(除非你特意去装了 Jython 或 IronPython)。
你写的 Python 3 代码,绝大多数情况下都是在 CPython 上运行的。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shaohjz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值