为什么在Python里推荐使用多进程而不是多

在Python多线程下,每个线程的执行方式:1、获取GIL 2、执行代码直到sleep或者是python虚拟机将其挂起。3、释放GIL                可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个...
为什么在Python里推荐使用多进程而不是多
最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?        
        
要知其然,更要知其所以然。所以有了下面的深入研究:        
        

首先强调背景:        
1、GIL是什么?
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。        
2、每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。)

在Python多线程下,每个线程的执行方式:
1、获取GIL
2、执行代码直到sleep或者是python虚拟机将其挂起。
3、释放GIL        
        
可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。        
        
在Python2.x里,GIL的释放逻辑是当前线程遇见IO操作或者ticks计数达到100(ticks可以看作是Python自身的一个计数器,专门做用于GIL,每次释放后归零,这个计数可以通过 sys.setcheckinterval 来调整),进行释放。        
        
而每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。        
                                 
那么是不是python的多线程就完全没用了呢?        
在这里我们进行分类讨论:        
1、CPU密集型代码(各种循环处理、计数等等),在这种情况下,由于计算工作多,ticks计数很快就会达到阈值,然后触发GIL的释放与再竞争(多个线程来回切换当然是需要消耗资源的),所以python下的多2018-01-20
全局解释锁2018-01-19
mengvlog 阅读 13 次 更新于 2025-07-19 18:13:14 我来答关注问题0
  • 1、CPU密集型代码(各种循环处理、计数等等),在这种情况下,由于计算工作多,ticks计数很快就会达到阈值,然后触发GIL的释放与再竞争(多个线程来回切换当然是需要消耗资源的),所以python下的多

  •  匡梧太叔幼菱 为什么在python里推荐使用多进程而不是多线程

    监控一个信号就起一个线程与进程处理。这样的逻辑是不太合适的。所有的资源都是有限的,如果这样浪费很快会资源管理失控。常规的做法是起一个线程池,或者是进程池。 使用线程还是进程取决于你处理的信号的类型。如果计算量大,则需要进程池,如果只是设备等待,比如网络数据收发,则线程也勉强够用。信号过...

  •  深空见闻 python在物流大数据分析中的应用

    Python在物流大数据分析中的应用主要体现在自动化、数据分析、优化路线、库存管理等多个方面。自动化:Python脚本能够实现物流流程的自动化操作,显著提高效率并减少人为错误。例如,使用pandas库可以自动处理订单数据,根据库存情况自动分配仓库和发货地点,并与ERP系统或数据库集成,实现订单信息的自动更新和同步。

  •  翡希信息咨询 学习Python用哪个版本好

    学习Python,推荐使用Python 3.5版本或更高版本。以下是推荐该版本的主要原因:广泛支持:Python 3.5及更高版本已经得到了广泛的社区支持和维护,这意味着你可以轻松找到大量的教程、文档和社区帮助。库和框架的兼容性:大多数现代的Python库和框架都支持Python 3.5及更高版本。这些库和框架包括数据处理...

  • wx1010581743 为啥推荐python

    1.易于学习和使用 与其他编程语言相比,Python更易于学习。它的语法很简单,与英语非常相似。没有使用分号或花括号,而是用缩进来定义代码块,可以更清晰地 理解代码块,这是给初学者推荐Python的第一个理由。2.Python是一门表达能力很强的编程语言 3.Python是解释性运行语言 Python是一种解释性语言;这...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部