如何使用python找出CPU数量
我想知道使用Python的本地计算机上的CPU数量。 当使用最佳缩放的仅用户空间程序调用时,结果应该是user/real
如time(1)
所输出。
#1楼
如果您对当前进程可用的处理器数量感兴趣,则必须首先检查cpuset 。 否则(或者如果未使用cpuset), multiprocessing.cpu_count()
是在Python 2.6及更高版本中使用的方法。 以下方法可回溯到旧版本的Python中的两个替代方法:
import os
import re
import subprocessdef available_cpu_count():""" Number of available virtual or physical CPUs on this system, i.e.user/real as output by time(1) when called with an optimally scalinguserspace-only program"""# cpuset# cpuset may restrict the number of *available* processorstry:m = re.search(r'(?m)^Cpus_allowed:\s*(.*)$',open('/proc/self/status').read())if m:res = bin(int(m.group(1).replace(',', ''), 16)).count('1')if res > 0:return resexcept IOError:pass# Python 2.6+try:import multiprocessingreturn multiprocessing.cpu_count()except (ImportError, NotImplementedError):pass# https://github.com/giampaolo/psutiltry:import psutilreturn psutil.cpu_count() # psutil.NUM_CPUS on old versionsexcept (ImportError, AttributeError):pass# POSIXtry:res = int(os.sysconf('SC_NPROCESSORS_ONLN'))if res > 0:return resexcept (AttributeError, ValueError):pass# Windowstry:res = int(os.environ['NUMBER_OF_PROCESSORS'])if res > 0:return resexcept (KeyError, ValueError):pass# jythontry:from java.lang import Runtimeruntime = Runtime.getRuntime()res = runtime.availableProcessors()if res > 0:return resexcept ImportError:pass# BSDtry:sysctl = subprocess.Popen(['sysctl', '-n', 'hw.ncpu'],stdout=subprocess.PIPE)scStdout = sysctl.communicate()[0]res = int(scStdout)if res > 0:return resexcept (OSError, ValueError):pass# Linuxtry:res = open('/proc/cpuinfo').read().count('processor\t:')if res > 0:return resexcept IOError:pass# Solaristry:pseudoDevices = os.listdir('/devices/pseudo/')res = 0for pd in pseudoDevices:if re.match(r'^cpuid@[0-9]+$', pd):res += 1if res > 0:return resexcept OSError:pass# Other UNIXes (heuristic)try:try:dmesg = open('/var/run/dmesg.boot').read()except IOError:dmesgProcess = subprocess.Popen(['dmesg'], stdout=subprocess.PIPE)dmesg = dmesgProcess.communicate()[0]res = 0while '\ncpu' + str(res) + ':' in dmesg:res += 1if res > 0:return resexcept OSError:passraise Exception('Can not determine number of CPUs on this system')
#2楼
如果您的Python版本> = 2.6,则可以简单地使用
import multiprocessingmultiprocessing.cpu_count()
http://docs.python.org/library/multiprocessing.html#multiprocessing.cpu_count
#3楼
另一个选择是使用psutil
库,该库在以下情况下总是有用的:
>>> import psutil
>>> psutil.cpu_count()
2
这应该可以在psutil
支持的任何平台(Unix和Windows)上运行。
请注意,在某些情况下, multiprocessing.cpu_count
可能会引发NotImplementedError
而psutil
将能够获得CPU数量。 这仅仅是因为psutil
首先尝试使用multiprocessing
使用的相同技术,如果失败,它还将使用其他技术。
#4楼
multiprocessing.cpu_count()
将返回逻辑CPU的数量,因此,如果您具有带超线程功能的四核CPU,它将返回8
。 如果您想要物理CPU的数量,请使用python绑定来hwloc:
#!/usr/bin/env python
import hwloc
topology = hwloc.Topology()
topology.load()
print topology.get_nbobjs_by_type(hwloc.OBJ_CORE)
hwloc设计为可跨操作系统和体系结构移植。
#5楼
如果您没有Python 2.6,请选择另一个选项:
import commands
n = commands.getoutput("grep -c processor /proc/cpuinfo")
#6楼
在Python 3.4+中: os.cpu_count() 。
multiprocessing.cpu_count()
是根据此函数实现的,但如果os.cpu_count()
返回None
(“无法确定CPU数” os.cpu_count()
则会引发NotImplementedError
。
#7楼
您也可以为此目的使用“ joblib”。
import joblib
print joblib.cpu_count()
此方法将为您提供系统中的cpus数。 但是需要安装joblib。 关于joblib的更多信息可以在这里找到https://pythonhosted.org/joblib/parallel.html
或者,您可以使用python的numexpr软件包。 它具有许多简单的功能,有助于获取有关系统cpu的信息。
import numexpr as ne
print ne.detect_number_of_cores()
#8楼
平台无关:
psutil.cpu_count(逻辑=假)
https://github.com/giampaolo/psutil/blob/master/INSTALL.rst
#9楼
无法弄清楚如何添加到代码或回复消息,但是这里提供了对jython的支持,您可以在放弃之前先加以支持:
# jython
try:from java.lang import Runtimeruntime = Runtime.getRuntime()res = runtime.availableProcessors()if res > 0:return res
except ImportError:pass
#10楼
import osprint(os.cpu_count())
#11楼
这些给你超线程的CPU数量
multiprocessing.cpu_count()
os.cpu_count()
这些为您提供虚拟机的CPU数量
psutil.cpu_count()
numexpr.detect_number_of_cores()
仅在您在VM上工作时才重要。
#12楼
len(os.sched_getaffinity(0))
是您通常想要的
https://docs.python.org/3/library/os.html#os.sched_getaffinity
考虑到sched_setaffinity
Linux系统调用 , os.sched_getaffinity(0)
(在Python 3中添加)返回可用的CPU集,它限制了进程及其子进程可以在哪些CPU上运行。
0
表示获取当前进程的值。 该函数返回允许的CPU的set()
,因此需要len()
。
另一方面, multiprocessing.cpu_count()
仅返回物理CPU的总数。
区别尤其重要,因为某些集群管理系统(例如Platform LSF)通过sched_getaffinity
限制作业CPU使用率。
因此,如果您使用multiprocessing.cpu_count()
,您的脚本可能会尝试使用比可用内核更多的内核,这可能导致过载和超时。
通过限制与taskset
实用程序的相似性,我们可以具体看到差异。
例如,如果我在16核系统中将Python限制为仅1核(0核):
taskset -c 0 ./main.py
使用测试脚本:
main.py
#!/usr/bin/env python3import multiprocessing
import osprint(multiprocessing.cpu_count())
print(len(os.sched_getaffinity(0)))
那么输出是:
16
1
但是, nproc
在默认情况下确实遵守关联性,并且:
taskset -c 0 nproc
输出:
1
man nproc
对此非常明确:
打印可用的处理单元数
对于要获取物理CPU计数的较不常见的情况, nproc
具有--all
标志:
taskset -c 0 nproc --all
该方法的唯一缺点是,它似乎仅适用于UNIX。 我认为Windows必须具有类似的相似性API,可能是SetProcessAffinityMask
,所以我想知道为什么还没有移植它。 但是我对Windows一无所知。
已在Ubuntu 16.04,Python 3.5.2中进行了测试。
#13楼
这对于使用不同操作系统/系统但想要获得世界最佳状态的我们来说可能是有用的:
import os
workers = os.cpu_count()
if 'sched_getaffinity' in dir(os):workers = len(os.sched_getaffinity(0))
如何使用python找出CPU数量相关推荐
- python虚拟cpu性能_如何使用python找出CPU数量
I want to know the number of CPUs on the local machine using Python. The result should be user/real ...
- python找出素数_[Python 1] 如何使用Python找质数?
学习生物信息需要熟练掌握一门甚至多门编程语言,比如Python.R.C++,这取决于你的需求. 但语言只是工具,最关键的是如何合理使用工具去解决生物学问题,这需要你去多写.多查.多看来锻炼.不然给你把 ...
- 震惊!小伙竟然用python找出了马大师视频中的名场面
震惊!小伙竟然用python找出了马大师视频中的名场面 前言 一.爬取视频弹幕 二.弹幕分析 1. 弹幕频数统计 2. 绘制频数分布图 3. 标红高潮部分 三.大师的名场面 写在最后 前言 最近江湖中 ...
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...
- Python找出列表中出现次数最多的元素三种方式
通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...
- linux 端口tnpl,利用Python找出9个连续的空闲端口
这篇文章主要介绍了Python找出9个连续的空闲端口的方法,感兴趣的小伙伴们可以参考一下 一.项目需求 安装某软件,配置时候需要填写空闲的端口.查看5个平台的某个端口是否被占用 5个平台为window ...
- Top命令找出CPU占用较高的Java线程信息
Top命令找出CPU占用较高的Java线程信息 由于种种原因导致生产环境的应用CPU占用奇高, 这个时候就需要确定到底是哪些线程占用了较高的CPU, 然后再做针对性的优化, 可以使用jconsole/ ...
- python找出某个文件夹下某个后缀的文件
python找出某个文件夹下某个后缀的文件 import osdef find_files_with_suffix(folder_path, suffix):# 使用os模块获取文件夹中所有文件的路径 ...
- python找最长的单词,Python 找出英文单词列表(list)中最长单词链
这篇文章主要介绍了Python 找出英文单词列表(list)中最长单词链,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本文主要 ...
最新文章
- MATLAB常用的学习的网站
- MyBatis学习--简单的增删改查
- unity android 集成指南
- Linq to sql 消除列重复 去重复
- EF 实现自定义数据库字符串
- 二分算法:平均值(洛谷 UVA1451)
- ResultSet转换为List的方法
- 如何远程登录连接Linux云服务器(电脑端/移动端)?
- 数学基础加强1---机器学习与数学分析
- 网吧电影视频服务器架设完全入门教程(转)
- Big Mart Sales:预测销售结果 |Python
- 103个后台PSD源文件、素材网站
- Java高级框架——Spring学习
- [解读] Unsupervised Feature Learning via Non-Parametric Instance Discrimination
- Android 文件存储系统
- 为Visual SVN Server添加认证用户IP功能
- 拜日式精准引导词_瑜伽 拜日式引导词 分享
- 西门子1200 压力PID调节实操
- 现要为某一个销售部门编写一个程序管理约100种商品。要求设计一个结构体类型来描述商品,每种商品包括商品编号(如A001)、商品名称、商品销售量和商品销售额等信息,并编写以下函数···········
- 2022年(金融保险)金融行业几个比较热门的证书
热门文章
- Android Camera 预览拉伸
- Android App压力测试(Monkey和ADB)
- bp神经网络算法步流程_基于遗传算法的BP神经网络优化算法模板
- iOS的类方法和实例方法区别与使用
- (0095)iOS开发之本地文件预览的三种方法(3)
- swift_040(Swift闭包声明与用途)
- (0021)iOS 开发之-苹果官方文档
- dxf转nc代码软件_eCAM高速激光加工软件
- 2017-2018-1 20155226《信息安全系统设计基础》第2周学习总结
- C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer