python多线程性能(Python 的 GIL 是什么鬼,多线程性能究竟如何)

2024-08-04 13:20:28 3

python多线程性能(Python 的 GIL 是什么鬼,多线程性能究竟如何)

大家好,python多线程性能相信很多的网友都不是很明白,包括Python 的 GIL 是什么鬼,多线程性能究竟如何也是一样,不过没有关系,接下来就来为大家分享关于python多线程性能和Python 的 GIL 是什么鬼,多线程性能究竟如何的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

Python 的 GIL 是什么鬼,多线程性能究竟如何

GIL是什么首先需要明确的一点是 GIL 并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行。像其中的JPython就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把 GIL 归结为Python语言的缺陷。所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL那么CPython实现中的GIL又是什么呢?GIL全称 Global Interpreter Lock 为了避免误导,我们还是来看一下官方给出的解释:In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)好吧,是不是看上去很糟糕?一个防止多线程并发执行机器码的一个Mutex,乍一看就是个BUG般存在的全局锁嘛!别急,我们下面慢慢的分析。为什么会有GIL由于物理上得限制,各CPU厂商在核心频率上的比赛已经被多核所取代。为了更有效的利用多核处理器的性能,就出现了多线程的编程方式,而随之带来的就是线程间数据一致性和状态同步的困难。 即使在CPU内部的Cache也不例外 ,为了有效解决多份缓存之间的数据同步时各厂商花费了不少心思,也不可避免的带来了一定的性能损失。Python当然也逃不开,为了利用多核,Python开始支持多线程。 而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性(即默认python内部对象是thread-safe的,无需在实现时考虑额外的内存锁和同步操作)。慢慢的这种实现方式被发现是蛋疼且低效的。但当大家试图去拆分和去除GIL的时候,发现大量库代码开发者已经重度依赖GIL而非常难以去除了。有多难?做个类比,像MySQL这样的“小项目”为了把Buffer Pool Mutex这把大锁拆分成各个小锁也花了从5.5到5.6再到5.7多个大版为期近5年的时间,本且仍在继续。MySQL这个背后有公司支持且有固定开发团队的产品走的如此艰难,那又更何况Python这样核心开发和代码贡献者高度社区化的团队呢?所以简单的说GIL的存在更多的是历史原因。如果推到重来,多线程的问题依然还是要面对,但是至少会比目前GIL这种方式会更优雅。GIL的影响从上文的介绍和官方的定义来看,GIL无疑就是一把全局排他锁。毫无疑问全局锁的存在会对多线程的效率有不小影响。甚至就几乎等于Python是个单线程的程序。那么读者就会说了,全局锁只要释放的勤快效率也不会差啊。只要在进行耗时的IO操作的时候,能释放GIL,这样也还是可以提升运行效率的嘛。或者说再差也不会比单线程的效率差吧。理论上是这样,而实际上呢?Python比你想的更糟。下面我们就对比下Python在多线程和单线程下得效率对比。测试方法很简单,一个循环1亿次的计数器函数。一个通过单线程执行两次,一个多线程执行。最后比较执行总时间。测试环境为双核的Mac pro。注:为了减少线程库本身性能损耗对测试结果带来的影响,这里单线程的代码同样使用了线程。只是顺序的执行两次,模拟单线程。顺序执行的单线程(single_thread.py)#! /usr/bin/pythonfrom threading import Threadimport timedef my_counter():i = 0for _ in range(100000000):i = i + 1return Truedef main():thread_array = {}start_time = time.time()for tid in range(2):t = Thread(target=my_counter)t.start()thread_array = tfor i in range(2):thread_array.join()end_time = time.time()print("Total time: {}".format(end_time - start_time))if __name__ == ’__main__’:main()同时执行的两个并发线程(multi_thread.py)#! /usr/bin/pythonfrom threading import Threadimport timedef my_counter():i = 0for _ in range(100000000):i = i + 1return Truedef main():thread_array = {}start_time = time.time()for tid in range(2):t = Thread(target=my_counter)t.start()thread_array = tfor i in range(2):thread_array.join()end_time = time.time()print("Total time: {}".format(end_time - start_time))if __name__ == ’__main__’:main()

为什么python多线程这么慢

差不多是这样子。多线程目前仅用于网络多线程采集, 以及性能测试。 其它的语言也有类似的情况,线程本身的特点导致线程的适用范围是受限的。只有CPU过剩,而其它的任务很慢,此时用线程才是有益的,可以很好平衡等待时间,提高并发性能。线程的问题主要是线程的安全稳定性。线程无法强制中止,同时线程与主进程共享内存,可能会影响主进程的内存管理。 在python里线程出问题,可能会导致主进程崩溃。 虽然python里的线程是操作系统的真实线程。那么怎么解决呢?通过我们用进程方式。子进程崩溃后,会完全的释放所有的内存和错误状态。所以进程更安全。 另外通过进程,python可以很好的绕过GIL,这个全局锁问题。 但是进程也是有局限的。不要建立超过CPU总核数的进程,否则效率也不高。 简单的总结一下。当我们想实现多任务处理时,首先要想到使用multiprocessing, 但是如果觉着进程太笨重,那么就要考虑使用线程。 如果多任务处理中需要处理的太多了,可以考虑多进程,每个进程再采用多线程。如果还处理不要,就要使用轮询模式,比如使用poll event, twisted等方式。如果是GUI方式,则要通过事件机制,或者是消息机制处理,GUI使用单线程。所以在python里线程不要盲目用, 也不要滥用。 但是线程不安全是事实。如果仅仅是做几个后台任务,则可以考虑使用守护线程做。如果需要做一些危险操作,可能会崩溃的,就用子进程去做。 如果需要高度稳定性,同时并发数又不高的服务。则强烈建议用多进程的multiprocessing模块实现。在linux或者是unix里,进程的使用代价没有windows高。还是可以接受的。

Python 多线程效率不高吗

Python由于有全锁局的存在(同一时间只能有一个线程执行),并不能利用多核优势。所以,如果你的多线程进程是CPU密集型的,那多线程并不能带来效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降;如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。

python多线程能提高效率吗

  • 如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。这个时候C代码里是有release GIL的,最终结果是某个线程等待IO的时候其他线程可以继续执行。反过来讲:你就不应该用Python写CPU密集型的代码…效率摆在那里…如果确实需要在CPU密集型的代码里用concurrent,就去用multiprocessing库。这个库是基于multi process实现了类multi thread的API接口,并且用pickle部分地实现了变量共享。再加一条,如果你不知道你的代码到底算CPU密集型还是IO密集型,教你个方法:multiprocessing这个module有一个dummy的sub module,它是基于multithread实现了multiprocessing的API。假设你使用的是multiprocessing的Pool,是使用多进程实现了concurrencyfrom multiprocessing import Pool如果把这个代码改成下面这样,就变成多线程实现concurrencyfrom multiprocessing.dummy import Pool两种方式都跑一下,哪个速度快用哪个就行了。UPDATE:刚刚才发现concurrent.futures这个东西,包含ThreadPoolExecutor和ProcessPoolExecutor,可能比multiprocessing更简单

关于python多线程性能到此分享完毕,希望能帮助到您。

python多线程性能(Python 的 GIL 是什么鬼,多线程性能究竟如何)

本文编辑:admin

本文相关文章:


python多线程性能(为什么python多线程这么慢)

python多线程性能(为什么python多线程这么慢)

本文目录为什么python多线程这么慢python多线程能提高效率吗Python 多线程效率不高吗Python 的 GIL 是什么鬼,多线程性能究竟如何为什么python多线程这么慢差不多是这样子。多线程目前仅用于网络多线程采集, 以及性能

2024年7月5日 01:38

更多文章:


腾讯哪个电话能转人工(腾讯人工台电话是多少)

腾讯哪个电话能转人工(腾讯人工台电话是多少)

大家好,腾讯哪个电话能转人工相信很多的网友都不是很明白,包括腾讯人工台电话是多少也是一样,不过没有关系,接下来就来为大家分享关于腾讯哪个电话能转人工和腾讯人工台电话是多少的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本

2024年4月11日 07:35

12306火车票网上订票app(怎样下载铁路12306)

12306火车票网上订票app(怎样下载铁路12306)

大家好,关于12306火车票网上订票app很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于怎样下载铁路12306的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2024年6月24日 03:13

电脑桌面动态壁纸(动态壁纸怎么设置)

电脑桌面动态壁纸(动态壁纸怎么设置)

其实电脑桌面动态壁纸的问题并不复杂,但是又很多的朋友都不太了解动态壁纸怎么设置,因此呢,今天小编就来为大家分享电脑桌面动态壁纸的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录动态壁纸怎么设置电脑如何设置动态壁纸如

2024年8月1日 15:15

全5阶植物0阳光无冷却版(零阳光无冷却满级植物可叠种是什么)

全5阶植物0阳光无冷却版(零阳光无冷却满级植物可叠种是什么)

大家好,关于全5阶植物0阳光无冷却版很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于零阳光无冷却满级植物可叠种是什么的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮

2024年8月29日 12:15

免费下载腾讯视频最新版(腾讯视频怎么下载电影 腾讯视频下载电影)

免费下载腾讯视频最新版(腾讯视频怎么下载电影 腾讯视频下载电影)

各位老铁们,大家好,今天由我来为大家分享免费下载腾讯视频最新版,以及腾讯视频怎么下载电影 腾讯视频下载电影的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本

2024年7月1日 01:00

瘦客户机是什么意思(电脑垃圾;一个世界性新难题 瘦客户机 是什么意思)

瘦客户机是什么意思(电脑垃圾;一个世界性新难题 瘦客户机 是什么意思)

本文目录电脑垃圾;一个世界性新难题 瘦客户机 是什么意思瘦客户机是什么意思“瘦客户机“是什么意思瘦终端和瘦客户机是一个意思吗瘦客户机是什么意思,为什么提出这一概念“瘦客户机”是什么意思瘦客户机是什么意思(简易描述)电脑垃圾;一个世界性新难题

2024年5月2日 06:10

小米手机qq(小米手机qq消息不弹窗)

小米手机qq(小米手机qq消息不弹窗)

本文目录小米手机qq消息不弹窗小米手机为何qq收到消息通知栏不会提示了小米手机为什么安装不了QQ小米手机qq怎么退出小米手机通知栏的qq消息划不掉怎么回事小米手机qq怎么分身小米手机QQ怎么退出小米手机如何让qq请勿打扰看到消息小米手机qq

2023年10月30日 04:40

什么是电骡?电驴是啥东西

什么是电骡?电驴是啥东西

今天给各位分享什么是电骡的知识,其中也会对什么是电骡进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录什么是电骡电驴是啥东西电驴是什么电骡和电驴有啥区别什么是电驴电骡是什么怎么使用什么是电骡电驴(eMule是)一

2024年6月12日 15:06

下载主题桌面(如何下载桌面主题)

下载主题桌面(如何下载桌面主题)

大家好,关于下载主题桌面很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何下载桌面主题的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录如何下载桌面主题

2024年6月25日 05:14

手机微信最新版本下载(手机微信最新版是多少)

手机微信最新版本下载(手机微信最新版是多少)

本篇文章给大家谈谈手机微信最新版本下载,以及手机微信最新版是多少对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录手机微信最新版是多少如何下载

2024年7月20日 02:41

caxa下载(CAXA软件那里有下载啊!)

caxa下载(CAXA软件那里有下载啊!)

本文目录CAXA软件那里有下载啊!caxa下载为什么总安装中望CADCAXA软件在哪下载请问CAXA在哪个网站下载CAXA软件那里有下载啊!到 http://www.caxa.com/download/index.asp 下载试用版(随便注

2024年7月3日 17:49

12306客服电话人工服务(铁路12306人工服务电话是多少)

12306客服电话人工服务(铁路12306人工服务电话是多少)

大家好,12306客服电话人工服务相信很多的网友都不是很明白,包括铁路12306人工服务电话是多少也是一样,不过没有关系,接下来就来为大家分享关于12306客服电话人工服务和铁路12306人工服务电话是多少的一些知识点,大家可以关注收藏,免

2024年6月14日 10:15

顺风快递物流查询(如何查询顺丰快递)

顺风快递物流查询(如何查询顺丰快递)

本文目录如何查询顺丰快递顺丰快递怎么查物流顺丰快递怎么查物流信息顺丰快递单号查询顺丰快递物流信息要怎么快速查询怎么查顺丰快递单号查询我想查顺丰快递到哪了怎么查顺丰快递到哪了怎么查看顺丰物流信息快递单号怎么查询如何查询顺丰快递可以登录顺丰快递

2024年7月3日 08:00

网络监控摄像头安装流程(家用网络监控怎么安装)

网络监控摄像头安装流程(家用网络监控怎么安装)

各位老铁们,大家好,今天由我来为大家分享网络监控摄像头安装流程,以及家用网络监控怎么安装的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录家用网络监控

2024年7月26日 13:55

神域之战官网(神谕之战制作武器的材料怎么获得)

神域之战官网(神谕之战制作武器的材料怎么获得)

本文目录神谕之战制作武器的材料怎么获得神谕之战单机怎么安装tera神谕之战这个游戏登不进去神谕之战制作武器的材料怎么获得【 制造系统 】TERA中的装备,在商店里买不到,只有通过杀怪或者任务,再或者是制作才能获得装备。不过在任务与杀怪中得到

2024年5月5日 08:42

暗黑破坏神3手游(暗黑破坏神3换角色传奇宝石怎么换)

暗黑破坏神3手游(暗黑破坏神3换角色传奇宝石怎么换)

各位老铁们好,相信很多人对暗黑破坏神3手游都不是特别的了解,因此呢,今天就来为大家分享下关于暗黑破坏神3手游以及暗黑破坏神3换角色传奇宝石怎么换的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录暗黑破坏神3换角色传

2024年6月30日 04:53

梦之旅3攻略(梦之旅3中迷宫怎么走)

梦之旅3攻略(梦之旅3中迷宫怎么走)

本文目录梦之旅3中迷宫怎么走梦之旅3 配药谁知到,梦之旅3中,蒸汽过后的迷宫路该怎么走要详细的步骤~~梦之旅3中迷宫怎么走蒸汽关了之后,往里走看见两边都有的岔路,往左拐,再直走,再拐,最后走到一个房间里,你能看见一个玻璃房子里面躺着一个人,

2024年6月29日 11:18

五笔练习软件(什么软件可以练打字)

五笔练习软件(什么软件可以练打字)

各位老铁们好,相信很多人对五笔练习软件都不是特别的了解,因此呢,今天就来为大家分享下关于五笔练习软件以及什么软件可以练打字的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录什么软件可以练打字练习五笔打字,用什么软件

2024年8月28日 09:01

手机小说下载网(手机TXT小说下载网有哪些)

手机小说下载网(手机TXT小说下载网有哪些)

其实手机小说下载网的问题并不复杂,但是又很多的朋友都不太了解手机TXT小说下载网有哪些,因此呢,今天小编就来为大家分享手机小说下载网的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录手机TXT小说下载网有哪些手机小

2024年5月16日 18:16

在重庆,有什么治疗胃癌的地方嘛!急盼回答!?i重医怎么查成绩 i重医app查询成绩

在重庆,有什么治疗胃癌的地方嘛!急盼回答!?i重医怎么查成绩 i重医app查询成绩

本文目录在重庆,有什么治疗胃癌的地方嘛!急盼回答!i重医怎么查成绩 i重医app查询成绩重庆医科大学和温州医科大学哪个好一点老婆得了甲亢,我想问在重庆哪里治疗甲亢好重庆医科大学怎么用itouch无线上网 重医用的是50元包月的电信宽带,有w

2024年5月3日 09:28

近期文章

we英文怎么读?we则么读
2024-09-28 03:05:17
本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索