热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python功能有多强

本文主要介绍关于linux,运维,服务器,python的知识点,对Python3.11推迟发布,原因竟然是……和python功能有多强有兴趣的朋友可以看下由【程序员枸杞.】投稿的技术文章,希望该技术和

本文主要介绍关于linux,运维,服务器,python的知识点,对Python3.11推迟发布,原因竟然是……和python功能有多强有兴趣的朋友可以看下由【程序员枸杞.】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的相关技术问题。

python功能有多强

事件回顾  

就在不久前,Python核心开发者Pablo在邮件中宣布,由于一些重要的性能Bug和崩溃问题,预计在10月底发布的Python 3.11稳定版本可能要推迟到12月。

图片来源@邮件截图

此事引来了不少人的关注。

Python是当今最流行的编程语言之一,StackOverflow 2022 开发者报告显示,对初学者而言,HTML/CSS、Javascript和Python几乎并列为最常用的语言,而在TIOBE发布的2022年6月编程语言排行上,Python语言则排名第一,因而Python语言新版本的发布,通常很受关注。

自2008年12月3日Python3.0发布以来,Python官方计划每年发布一个新版本,每次增加两三种新语法。

虽然实际情况并没有严格按照计划实现,但自3.8版本以后,Python的发版节奏基本有规律可循:在每个版本发布前,都有17个月的开发周期,在此期间要进行持续的开发测试;

测试期间,首先会发布alpha版本,等到4月份再发布beta版本,直到10月左右,发布最终的正式版本。

Python 3历次版本发布时间

本来,计划今年发布的3.11版本也是按照这个节奏进行,但这次,3.11版本的发布会成为一个例外。

值得一提的是,在邮件的最后,Pablo对能否在12月发布稳定版本也没有信心。

图片来源@邮件截图

 

Python 3.11期待已久  

虽然Python简单易学,但其运行速度之慢历来被诟病(在每次的编程语言速度竞赛中,Python的名次通常都垫底),因而很多开发者期待这门语言的性能有所提升。

也许正是这个原因,Python创始人Guido van Rossum重新出山后,在2021年Python语言峰会上作了一场《Making CPython Faster》的分享,他表示,自己已经投入了“香农计划”(“Shannon Plan”,得名于提出者Mark Shannon),期望花4年时间把Python提速5倍,即每年1.5倍,其中近期计划是在Python 3.11 版本中实现至少提速1倍。

根据7月6日发布的Python 3.11.0b3来看,在Ubuntu Linux上使用GCC编译,且使用pyperformance基准套件测量时,CPython 3.11比CPython 3.10平均快25%。根据工作负载的不同,CPython 3.11的提速介于10% 到 60% 之间。

图片来源@文档截图

此外,由于Python3.11是一个较大版本更新,根据已有的测试结果看,其在更精确的错误提示、类型特性、用except*处理多个异常、Zero-cost异常、改进类型(包括改进类型、任意的字符串字面类型、数据类转换、标准库中的 TOML 只读支持等)也有改进,这些也是开发者比较期待的新功能。

   如何给Python“踩踩油门”  

此前Python为何会给大家留下运行速度慢的印象呢?通常有三种解释。

第一种解释为Python是动态性语言不是静态性语言。对C等静态语言来说,编译器在声明变量的时候就知道其类型了;而对Python来说,Python程序在执行的时候,编译器不知道变量的类型,只知道它是一个对象。

这意味着,即使是a+b这样的简单二元运算,由于变量a和b本身都没有类型,而它们的值有类型,Python执行起来也很“麻烦”:在相“加”之前,必须先判断类型。

第二种解释是Python是解释性语言而不是编译性语言。像C、C++、Rust这些语言是直接编译成机器码运行,是编译型语言;Python的运行过程是虚拟机读入Python代码(文本),词法分析,编译成虚拟机认识的opcode,然后虚拟机解释opcode执行,而最后这一步“虚拟机解释opcode执行”是比较费时间的。

第三种解释认为,是全局解释器锁(GIL,Global Interpreter Lock)的原因。

现代计算机处理器一般都会有多核,甚至有些服务器有多个处理器。所以操作系统抽象出 Thread,可以在一个进程中spawn出多个Thread,让这些Thread在多个核上面同时运行,发挥处理器的最大效率。

而Python自带垃圾回收程序,且选择的实现垃圾回收机制是引用计数+分代回收,并以引用计数为主。在多线程情况下,大家一起运行,引用计数多个线程一起操作,为保证不发生线程不安全的事情,多个线程操作同一个对象需要加锁。

这就是GIL,只不过这个锁的粒度太大了,整个Python解释器全局只有一个Thread可以运行。换句话说,无论电脑CPU有多少核,对Python来说,它只用一个核。

这三种解释都有一定道理,理论上Python提速可以从以上三个方向进行突破。

从最近Python团队公布的情况看,Python 3.11 的性能改进主要集中在更快的启动和更快的运行时,这些优化大部分来自于PEP 659(一种自适应解释器),它运作思路跟JIT有点相似,都是识别热点代码,但自适应解释器的工作范围无法脱离字节码。

图片来源@文档截图

  3.11为何会推迟发布  

从Pablo在邮件中公布的信息看,Python 3.11推迟发布主要是由于出现很多“影响发布”的bug。

图片来源@GitHub截图

虽然bug的细节还有待进一步发掘,但根据现有情况猜测,问题可能在以下的两方面。

一是C扩展的问题。CPython与C的简单接口是主要优势,而与C扩展的不兼容性则是一大槽点。CPython团队在CPython 3.11中所做的优化工作在很大程度上忽略了扩展模块的问题,对此,团队领导者香农表示,团队正在开辟将低级函数API暴露给虚拟机的可能性,以尽可能地减少Python代码和C代码。

二是前面反复提到的提速问题。Python创始人Guido van Rossum预期Python 3.11版本中实现至少提速1倍,而目前Python 3.11.0b3比Python 3.10平均只快了25%,跟理想目标还有不小的差距。

另外,Meta开发人员Sam Gross在今年的Python语言峰会上,向与会者介绍了nogil的情况,这是一个专注于移除GIL的项目,据Python基金会介绍,Gross 将发明一种新型锁,如果顺利的话,这个新锁很可能在Python 3.12版本亮相。

Sam Gross的提案虽然让很多开发者兴奋,但与Python团队的现在工作基于PEP 659进行优化的工作会产生冲突:毕竟CPython团队已实施的优化,很大一部分都基于GIL仍存在的前提。

如果采用Sam Gross的提案,在Python 3.12去除GIL,那么Python 3.11就要做出不小的改动,也许,这也是导致Python 3.11延期的重要原因。

总之,考虑到当前Python在编程语言界“如日中天”的地位,Python 3.11又志在克服其最大的缺点,Python的未来还是很值得期待的。

【python学习】
学Python的伙伴,欢迎加入新的交流【君羊】:1020465983
一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料 

本文《Python3.11推迟发布,原因竟然是……》版权归程序员枸杞.所有,引用Python3.11推迟发布,原因竟然是……需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 深入浅析JVM垃圾回收机制与收集器概述
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》的阅读心得进行整理,详细探讨了JVM的垃圾回收机制及其各类收集器的特点与应用场景。通过分析不同垃圾收集器的工作原理和性能表现,帮助读者深入了解JVM内存管理的核心技术,为优化Java应用程序提供实用指导。 ... [详细]
author-avatar
Alistar1991_281
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有