重磅:Python 迎来多线程重大更新 no-GIL

news2024/11/27 11:50:09

“在 Python 中,GIL 将不复存在。对 AI 生态系统来说是巨大的胜利。”PyTorch 核心维护者 Dmytro Dzhulgakov 感慨地说道。
noGIL

GIL 是什么?GIL 的全称是 Global Interpreter Lock(全局解释器锁),这不仅是 Python 的特性,而是在实现 CPython(Python 解释器)时引入的一个概念。我们可以将 GIL 理解为一个互斥锁,用于保护 Python 中的对象,防止多个线程同时执行 Python 字节码,从而确保线程安全。

然而,GIL 有一个缺点,那就是一次只有一个线程能在一个 CPU 上执行,多个线程无法映射到多个 CPU,因此 Python 无法实现真正的多线程并发,从而降低了执行效率。

现在,Python 团队已正式接受了移除 GIL 的提案,并将其作为可选模式,这对开发者来说是件好事。

这项贡献是由 Meta 公司的软件工程师 Sam Gross 完成的,他花费了四年多的时间来完成这个项目。

听到这个消息后,大家都报以热烈的掌声。深度学习三巨头之一的 Yann LeCun 发来了祝贺的消息:没有了 GIL,Python 代码现在可以自由地执行多线程了。
YY

Python 不再有 GIL。
Python

从 Python 中移除 GIL,将呈现出语言能力指数级增长。
hh

关于详情,请看下文。

CPython 核心开发者 Thomas Wouters 详细介绍了无 GIL 的 Python,并展望未来。

非常感谢大家对无 GIL 提案的反馈,以及整体的积极支持。管理委员会打算接受无 GIL 提案,并在下文中与大家分享具体细节。

基本假设是:

  • 长期来看(大约 5 年以上),无 GIL 构建应该是唯一的构建方式;
  • 我们希望在考虑到向后兼容性时要非常小心。我们不希望出现另一个 Python 3 的情况,即所有第三方代码的更改都应仅适用于有 GIL 的构建(尽管仍需解决与旧版 Python 的向后兼容性问题)。这对于 Python 4 是行不通的。我们仍在考虑 ABI 兼容性等这两种构建的要求和其他细节,以及对向后兼容性的影响;
  • 在我们完全过渡到无 GIL 设置之前,希望看到社区的支持。我们不能仅仅改变默认设置,我们希望社区能够想出支持我们的方法。我们的核心开发团队需要在新的构建模式和相关内容上获得经验。我们需要解决现有代码的线程安全性问题,并需要找出新的 C API 和 Python API。我们还需要将这些见解传达给 Python 社区的其他人,并确保我们希望进行的更改以及我们希望其他人进行的更改是可取的;
  • 在我们默认设置为无 GIL 之前的任何时候,如果发现对收益太小而过于破坏性,我们希望能够改变主意。这也意味着我们撤销所有的工作,因此无 GIL 特定的代码应该在我们决定将无 GIL 设置为默认之前是可以识别的。

目前,我们认为前进的道路可以分为三个阶段:

  • 短期内,我们将使无 GIL 构建成为一种实验性的构建模式,可能在 3.13(或许是 3.14)中。这是实验性的,因为我们的核心开发团队虽然支持这种构建模式,但并不指望整个社区都支持它。我们需要时间来弄清楚我们想要做什么,至少在 API 设计、打包和分发方面,以便我们能够得到社区的支持。我们还不鼓励分发者将实验性的无 GIL 构建作为默认解释器发布。
  • 中期内,在我们有足够的社区支持确保无 GIL 的生产使用是可行的情况下,我们将支持无 GIL 构建,但不会默认支持,而是在某个目标日期或某个 Python 版本中成为默认方式。确切的时间取决于许多因素,例如 API 更改最终有多兼容,社区认为他们还需要做多少工作等等。我们预计这将需要至少一到两年的时间。一旦我们宣布支持,可以预期一些分发者会开始默认发布无 GIL 构建。
  • 长期来看,我们希望无 GIL 成为默认选项,并移除所有 GIL 的痕迹(但不会不必要地破坏向后兼容性)。我们不想等待太久,毕竟同时存在两种常用的构建模式会给社区带来很大的负担(例如需要双倍测试资源和调试场景)。但我们也不能太仓促。我们认为这个过程将需要五年的时间。

当然,在整个过程中,我们的整个开发团队都需要实时评估进展并对时间表进行调整。

对于 GIL 可选化,你有什么想法呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计-基于python的旅游信息爬取以及数据分析

概要 随着计算机网络技术的发展,近年来,新的编程语言层出不穷,python语言就是近些年来最为火爆的一门语言,python语言,相对于其他高级语言而言,python有着更加便捷实用的模块以及库,具有语法简单…

彻底学会系列:一、机器学习之梯度下降(2)

1 梯度具体是怎么下降的? ∂ J ( θ ) ∂ θ \frac{\partial J (\theta )}{\partial \theta} ∂θ∂J(θ)​(损失函数:用来衡量模型预测值与真实值之间差异的函数) 对损失函数求导,与学习率相乘,按梯度反方…

mabatis 下

mybatis 原生的API&注解的方式MyBatis-原生的API调用快速入门需求快速入门代码实现 MyBatis-注解的方式操作快速入门需求快速入门代码实现注意事项和说明 mybatis-config.xml配置文件详解说明properties属性settings全局参数定义typeAliases别名处理器typeHandlers类型处理…

长安链团队论文入选国际顶会Usenix Security 2024

零知识证明是区块链扩容和隐私保护的关键前沿技术,其天然具备完备性、可靠性和零知识性的特点,是提升区块链交易吞吐量与可扩展性、在验证用户身份的同时保护用户数据隐私,实现复杂计算不可或缺的关键技术。基于零知识证明技术实现高兼容性、…

C++ 组合 委托 继承 组合使用

关于组合和委托看C中的组合,委托和继承 - 知乎 (zhihu.com) 继承和组合关系下的构造和析构 ​ 还有一种情况 ​ 构造函数由内到外,析构由外到内。 委托和继承关系组合 设计模式-观察者模式(Observer) ​ 如下图左边&#x…

稀碎从零算法笔记Day22-LeetCode:

题型:链表 链接:2. 两数相加 - 力扣(LeetCode) 来源:Leet 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 …

MySQL表的增删改查(基础版本)

MySQL的增删改查也就是CRUD CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。 1.新增 1.1 语法: INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ... value_list: value, [,…

【C语言】遍历目录树

在 Linux 环境下,如果编写程序且需要通过函数接口来遍历目录树,可以考虑使用以下几个常用的调用: 1. opendir() / readdir() / closedir(): 这是 POSIX 标准定义的函数,用于遍历目录。opendir() 用于打开一个目录&…

【C语言】access和stat函数

access 在C语言中&#xff0c;access 函数是一个用于检查文件的存在性以及对文件的访问权限的函数。它定义在 <unistd.h> 头文件中&#xff0c;通常在 Unix 系统中可用。这个函数可以用来验证当前用户是否有权访问指定的文件&#xff0c;以及这些权限的类型。 access 函…

express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建config/area.js二、新建models/address.js三、新建dao/address.js四、新建routes/address.js五、添加地址六、查询用户地址列表总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写serv…

微积分基础概念和在AI中的应用

基本概念 微积分是数学中的一个主要分支&#xff0c;专注于研究函数、极限、导数、积分等的理论。它是现代科学和工程中不可或缺的基础工具&#xff0c;尤其在处理变化率和累积量的问题时显得尤为重要。微积分通常分为两大部分&#xff1a;微分学和积分学。 微分学 微分学关…

NASA数据集——2017 年阿拉斯加和加拿大上空彩色红外图像中的 AirSWOT 水掩模数据集

简介 ABoVE: AirSWOT Water Masks from Color-Infrared Imagery over Alaska and Canada, 2017 摘要 本数据集提供了&#xff1a;1&#xff09;用于未来从共存的 AirSWOT Ka 波段干涉测量数据中提取水面高程 (WSE) 的保守开放水域掩膜&#xff1b;2&#xff09;沿 NASA 北极-…

宋仕强论道之华强北科技创新说

宋仕强论道之华强北科技创新说&#xff0c;“创新”是深圳市和华强北灵魂&#xff0c;创新再加上敢想敢干永不言败&#xff0c;造就了深圳市经济奇迹和华强北财富神话&#xff01;首次在深圳市落槌的“土地拍卖”&#xff0c;华强北“一米柜台”赋予独立经营权&#xff0c;把最…

Springboot通过注解+切面实现接口权限校验

Springboot通过注解&#xff0b;切面实现接口权限校验 主要说一下在对接口请求时&#xff0c;如何用注解切面去拦截校验当前登录用户是否有访问权限 1.首先创建注解 HasPermission &#xff0c;跟普通注解创建方式基本一致 Retention(RetentionPolicy.RUNTIME) Target(Element…

Python矩阵计算

文章目录 求积求逆最小二乘法特征值 Python科学计算&#xff1a;数组&#x1f4af;数据生成&#x1f4af;数据交互&#x1f4af;微积分&#x1f4af;插值&#x1f4af;拟合&#x1f4af;FFT&#x1f4af;卷积&#x1f4af;滤波&#x1f4af;统计 求积 矩阵是线性代数的核心对…

JVM 垃圾回收机制:探秘对象生死判定与高效回收算法

目录 一、JVM 对象生死判定 1.1 引用技术算法 1.2 可达性分型算法 二、引用 三、 回收方法区 四、垃圾回收算法 4.1 标记-清楚算法 4.2 标记-复制算法 4.3 标记-整理算法 JVM 程序计数器、虚拟机栈、本地方法栈随着线程而生&#xff0c;随着线程而灭。栈中的栈帧随着方法的…

相约CHWE全球跨境电商展,3月20日凯琦等你来!

凯琦又要和大家线下见面啦&#xff01; 2024年3月20日-22日&#xff0c;第三届CHWE全球跨境电商展将于深圳福田会展中心盛大开幕。该展会汇聚海内外平台、服务生态及海外线下渠道&#xff0c;助力企业快速扩大市场覆盖面和销售渠道&#xff0c;驱动品牌增长。 本次大会&#…

Python 全栈体系【四阶】(十六)

第五章 深度学习 一、基本理论 2. 深度神经网络结构 2.1 感知机 2.1.1 生物神经元 感知机&#xff08;Perceptron&#xff09;&#xff0c;又称人工神经元&#xff08;Artificial neuron&#xff09;&#xff0c;它是生物神经元在计算机中的模拟。下图是一个生物神经元示意…

故障诊断 | 一文解决,RBF径向基神经网络的故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述

【leetcode热题】二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…