导航:首页 > 编程语言 > python获取cpu个数

python获取cpu个数

发布时间:2025-01-12 06:36:45

1. python如何利用多核处理器

GIL 与 Python 线程的纠葛

GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题。运行下面这段 python 程序,CPU 占用率是多少?

# 请勿在工作中模仿,危险:)def dead_loop(): while True: passdead_loop()

答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU。在我的双核 CPU 上,这个死循环只会吃掉我一个核的工作负荷,也就是只占用 50% CPU。那如何能让它在双核机器上占用 100% 的 CPU 呢?答案很容易想到,用两个线程就行了,线程不正是并发分享 CPU 运算资源的吗。可惜答案虽然对了,但做起来可没那么简单。下面的程序在主线程之外又起了一个死循环的线程

import threadingdef dead_loop(): while True: pass# 新起一个死循环线程t = threading.Thread(target=dead_loop)t.start()# 主线程也进入死循环dead_loop()t.join()

按道理它应该能做到占用两个核的 CPU 资源,可是实际运行情况却是没有什么改变,还是只占了 50% CPU 不到。这又是为什么呢?难道 python 线程不是操作系统的原生线程?打开 system monitor 一探究竟,这个占了 50% 的 python 进程确实是有两个线程在跑。那这两个死循环的线程为何不能占满双核 CPU 资源呢?其实幕后的黑手就是 GIL。

GIL 的迷思:痛并快乐着

GIL 的全称为Global Interpreter Lock,意即全局解释器锁。在 Python 语言的主流实现 CPython 中,GIL 是一个货真价实的全局线程锁,在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行(这个次数可以通过sys.setcheckinterval来调整)。所以虽然 CPython 的线程库直接封装操作系统的原生线程,但 CPython 进程做为一个整体,同一时间只会有一个获得了 GIL 的线程在跑,其它的线程都处于等待状态等着 GIL 的释放。这也就解释了我们上面的实验结果:虽然有两个死循环的线程,而且有两个物理 CPU 内核,但因为 GIL 的限制,两个线程只是做着分时切换,总的 CPU 占用率还略低于 50%。

看起来 python 很不给力啊。GIL 直接导致 CPython 不能利用物理多核的性能加速运算。那为什么会有这样的设计呢?我猜想应该还是历史遗留问题。多核 CPU 在 1990 年代还属于类科幻,Guido van Rossum 在创造 python 的时候,也想不到他的语言有一天会被用到很可能 1000+ 个核的 CPU 上面,一个全局锁搞定多线程安全在那个时代应该是最简单经济的设计了。简单而又能满足需求,那就是合适的设计(对设计来说,应该只有合适与否,而没有好与不好)。怪只怪硬件的发展实在太快了,摩尔定律给软件业的红利这么快就要到头了。短短 20 年不到,代码工人就不能指望仅仅靠升级 CPU 就能让老软件跑的更快了。在多核时代,编程的免费午餐没有了。如果程序不能用并发挤干每个核的运算性能,那就意谓着会被淘汰。对软件如此,对语言也是一样。那 Python 的对策呢?

Python 的应对很简单,以不变应万变。在最新的 python 3 中依然有 GIL。之所以不去掉,原因嘛,不外以下几点:

2. python如何查看内存占用空间

利用psutil模块,如果没有直接 pip installpsutil

info=psutil.virtual_memory()
printu'内存使用:',psutil.Process(os.getpid()).memory_info().rss
printu'总内存:',info.total
printu'内存占比:',info.percent
printu'cpu个数:',psutil.cpu_count()
阅读全文

与python获取cpu个数相关的资料

热点内容
不知道密码怎么强制解压 浏览:179
疫情就是命令防控就是 浏览:870
linux查看存储设备 浏览:243
stc1t单片机 浏览:313
英华特涡旋压缩机 浏览:4
编译码器的输入输出干扰 浏览:542
往复式压缩气缸过热的原因 浏览:839
4u服务器机箱怎么卖 浏览:461
如何自学葡萄牙语app 浏览:456
摆来摆去的游戏解压 浏览:270
centos注销命令 浏览:859
vue多端编译 浏览:755
程序员qq表白代码编辑 浏览:893
联想服务器怎么进后台 浏览:116
安卓定制rom怎么刷 浏览:540
三层交换机的配置命令 浏览:112
49算法公式 浏览:792
求最小生成树算法代码及运行图片 浏览:932
python扫雷计数 浏览:881
什么安卓手机品牌最保值 浏览:847