京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:小K
来源:麦叔编程
今天可以来讲解下GIL是个什么了。
❞
GIL是Global Interpreter Lock的缩写,翻译过来就是全局解释器锁。
从字面上去理解,它就是锁在解释器头上的一把锁,它使Python代码运行变得有序。
假如有一段代码:
print(1)print(2)print(3)print(4)print(5)print(6)
运行之后,
123456
GIL通过确保在任何给定时间只运行一个线程来防止竞争条件
❝
GIL确保在任何给定时间只有一个线程在运行。
因此,不可能利用具有线程的多个处理器。
❞
❝
由于CPython的内存管理不是线程安全的,GIL可以防止竞争条件并确保线程安全。
❞
Python有多个解释器实现。分别用C、Java、C#和Python编写的CPython、Jython、IronPython和PyPy是最受欢迎的。
GIL 仅存在于CPython的原始Python实现中。
❝
那为什么不直接使用别的解释器为主要开发用呢?
因为CPython的库最为丰富。
如果别的解释器有支持你代码中的模块,那是可以直接移植过去使用的。
像Jython至今还没有推出Python3,只停留在Python2时代。
❞
我将用三段代码(单线程、多线程、多进程)解决一个问题(把50000000通过n-=1减至0)。
通过对比他们运行的所花费的时间,看哪段代码效率最高。
「单线程」
import timenum = 50000000def countdown(n): while n>0: n -= 1start = time.time()countdown(num)end = time.time()print('花费时间 -', end - start)
运行结果:
花费时间 - 3.7478301525115967
「多线程」
import timefrom threading import Threadnum = 50000000def countdown(n): while n>0: n -= 1t1 = Thread(target=countdown, args=[num//2])t2 = Thread(target=countdown, args=[num//2])start = time.time()t1.start()t2.start()t1.join()t2.join()end = time.time()print('花费时间 -', end - start)
运行结果:
花费时间 - 4.2221999168396
「多进程」
from multiprocessing import Poolimport timenum = 50000000def countdown(n): while n>0: n -= 1if __name__ == '__main__': pool = Pool(processes=2) start = time.time() r1 = pool.apply_async(countdown, [num//2]) r2 = pool.apply_async(countdown, [num//2]) pool.close() pool.join() end = time.time() print('花费时间 -', end - start)
运行结果:
花费时间 - 2.307600975036621
对于「计算密集型任务」,Python的多线程比单线程还慢,
这是由于线程的创建和销毁都要消耗资源(进程消耗资源更大)。
「对比单线程和多线程就能感受到GIL这个枷锁的束缚力了。」
用了多进程后,运行速度一下子从3.73缩短到2.30秒,证明多进程还是能突破GIL的封锁的。
❝
多进程底层是开了多个解释器去运行代码,一个进程一把GIL。
❞
Python三分钟--GIL专题到这一期就结束了~
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
尊敬的考生: 您好! 我们诚挚通知您,CDA Level III 考试大纲将于 2025 年 12 月 31 日实施重大更新,并正式启用,2026年3月考 ...
2025-12-31“字如其人”的传统认知,让不少“手残党”在需要签名的场景中倍感尴尬——商务签约时的签名歪歪扭扭,朋友聚会的签名墙不敢落笔 ...
2025-12-31在多元统计分析的因子分析中,“得分系数”是连接原始观测指标与潜在因子的关键纽带,其核心作用是将多个相关性较高的原始指标, ...
2025-12-31对CDA(Certified Data Analyst)数据分析师而言,高质量的数据是开展后续分析、挖掘业务价值的基础,而数据采集作为数据链路的 ...
2025-12-31在中介效应分析(或路径分析)中,间接效应是衡量“自变量通过中介变量影响因变量”这一间接路径强度与方向的核心指标。不同于直 ...
2025-12-30数据透视表是数据分析中高效汇总、多维度分析数据的核心工具,能快速将杂乱数据转化为结构化的汇总报表。在实际分析场景中,我们 ...
2025-12-30在金融投资、商业运营、用户增长等数据密集型领域,量化策略凭借“数据驱动、逻辑可验证、执行标准化”的优势,成为企业提升决策 ...
2025-12-30CDA(Certified Data Analyst),是在数字经济大背景和人工智能时代趋势下,源自中国,走向世界,面向全行业的专业技能认证,旨 ...
2025-12-29在数据分析领域,周期性是时间序列数据的重要特征之一——它指数据在一定时间间隔内重复出现的规律,广泛存在于经济、金融、气象 ...
2025-12-29数据分析师的核心价值在于将海量数据转化为可落地的商业洞察,而高效的工具则是实现这一价值的关键载体。从数据采集、清洗整理, ...
2025-12-29在金融、零售、互联网等数据密集型行业,量化策略已成为企业提升决策效率、挖掘商业价值的核心工具。CDA(Certified Data Analys ...
2025-12-29CDA中国官网是全国统一的数据分析师认证报名网站,由认证考试委员会与持证人会员、企业会员以及行业知名第三方机构共同合作,致 ...
2025-12-26在数字化转型浪潮下,审计行业正经历从“传统手工审计”向“大数据智能审计”的深刻变革。教育部发布的《大数据与审计专业教学标 ...
2025-12-26统计学作为数学的重要分支,是连接数据与决策的桥梁。随着数据规模的爆炸式增长和复杂问题的涌现,传统统计方法已难以应对高维、 ...
2025-12-26数字化浪潮席卷全球,数据已成为企业核心生产要素,“用数据说话、用数据决策”成为企业生存与发展的核心逻辑。在这一背景下,CD ...
2025-12-26箱线图(Box Plot)作为数据分布可视化的核心工具,凭借简洁的结构直观呈现数据的中位数、四分位数、异常值等关键信息,广泛应用 ...
2025-12-25在数据驱动决策的时代,基于历史数据进行精准预测已成为企业核心需求——无论是预测未来销售额、客户流失概率,还是产品需求趋势 ...
2025-12-25在数据驱动业务的实践中,CDA(Certified Data Analyst)数据分析师的核心工作,本质上是通过“指标”这一数据语言,解读业务现 ...
2025-12-25在金融行业的数字化转型进程中,SQL作为数据处理与分析的核心工具,贯穿于零售银行、证券交易、保险理赔、支付结算等全业务链条 ...
2025-12-24在数据分析领域,假设检验是验证“数据差异是否显著”的核心工具,而独立样本t检验与卡方检验则是其中最常用的两种方法。很多初 ...
2025-12-24