
psutil是一个Python写的方便获取系统硬件和性能信息的库。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。
>>>import psutil
>>>psutilcpu_count() #逻辑CPU个数
>>>psutilcpu_count(logical=False) #物理CPU个数
>>>psutilcpu_percent() #cpu平均使用率
>>>psutilcpu_percent(3) #最近3秒钟cpu平均使用率
>>>psutilcpu_freq() #CPU频率
scpufreq(current=8040, min=00, max=21120)
>>>psutilcpu_stats() #CPU状态
scpustats(ctx_switches=1910389985, interrupts=2644388135, soft_interrupts=0, syscalls=3686421224)
>>>import psutil
>>>psutilvirtual_memory()
部分嵌入式系统:
svmem(total=16919429120, available=4207607808, percent=751, used=12711821312, free=4207607808)
linux系统:
svmem(total=135077658624,available=12628275200,percent=907,used=122103193600,free=10256912384,active=111388827648,inactive=6278348800,buffers=278413312,cached=2439139328,shared=184320)
解析
1)total:总物理内存,包括已使用的物理内存和没使用的物理内存
total = used + free
2)used:已使用的物理内存
3)free:没使用的物理内存
4)available:可用内存,其包括没使用的物理内存,缓冲(如存在),缓存(若存在)。
available = free + buffers + cached
注意available和free的区别
5)percent:内存使用率,(总物理内存大小 - 可用内存大小) / 总物理内存大小 100
percent = (total - available) / total 100
延伸
交换内存
>>>import psutil
>>>psutilswap_memory()
sswap(total=29810581504, used=26177650688, free=3632930816, percent=878, sin=0, sout=0)
>>>import psutil
>>>psutildisk_usage("C:") # C盘的使用率
sdiskusage(total=285441257472, used=103434944512, free=182006312960, percent=362)
>>>psutildisk_usage("/") # 根分区的使用率
sdiskusage(total=225328492544, used=77228355584, free=148100136960, percent=343)
>>>psutildisk_partitions() # 获取分区信息
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxf
ile=255, maxpath=260)]
>>>psutildisk_io_counters() # 获取硬盘总的io和读写信息
sdiskio(read_count=3036624, write_count=7461516, read_bytes=111278890496, write_bytes=176975582208, read_time=1369, write_time=3012)
>>>psutildisk_io_counters(perdisk=True) # 获取单分区的io和读写信息
{'PhysicalDrive0': sdiskio(read_count=3046900, write_count=7464803, read_bytes=111679064576, write_bytes=177050010624, read_time=1372, write_time=3014)}
查看python内置函数的方法:1、打开PythonIDLE编辑器;2、输入"dir(__builtins__)"命令,按下回车键(Enter)得到Python全部内置变量和函数。
打开PythonIDLE,我用的是Python3。7,界面有个性定制。你的版本不同,界面有差异,但是 *** 作方法应该是一样的。输入dir(__builtins__)。
可以看到,返回的结果是以[开头以]结尾,说明是个列表,输入:len(dir(__builtins__))。
按下两次回车键(Enter)。按照默认的字母顺序,先是大写字母A-Z,然后是下划线(_)开头的,然后是小写字母a-z。
获取本机CPU温度、使用率、内存使用率、硬盘使用率等
在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。
你找一找这个库,rpyc。这个东西是目前RPC方面最好用的一个东西了。比我以前接触学习的分布式对象系统更好用。 其实python这个东西,因为是脚本,所以做分布式对象特别容易。主要是做好系列化与反系列化就可以了。
此外rpc-xml也是常用的一个方法。
如果你对需求理解深,通常不会选择分布式对象,而是自己定制数据结构,传输协议,序列化与反序列化。这样才能实现高效,可扩展性。
你在一个进程中创建一个对象,可以使用python自带的系列化模块pickle进行转换。然后传递到另一个进程中,再反序列化就可以实现。 *** 作完成后,再传递回来。这就是原理。
如果使用指定内存地址也是可以的。可以设计一个共享内存,然后通过numpy这个模块进行内存与对象的转换。其它的就不多说了。 当然你也可以自己设计序列化与反序列化模块。
通常复杂的对象效率低。整型固定长度数组是最快的。
Python的内存管理,一般从以下三个方面来说:
1)对象的引用计数机制(四增五减)
2)垃圾回收机制(手动自动,分代回收)
3)内存池机制(大m小p)
1)对象的引用计数机制
要保持追踪内存中的对象,Python使用了引用计数这一简单的技术。sysgetrefcount(a)可以查看a对象的引用计数,但是比正常计数大1,因为调用函数的时候传入a,这会让a的引用计数+1
2)垃圾回收机制
吃太多,总会变胖,Python也是这样。当Python中的对象越来越多,它们将占据越来越大的内存。不过你不用太担心Python的体形,它会在适当的时候“减肥”,启动垃圾回收(garbage
collection),将没用的对象清除
从基本原理上,当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了
比如某个新建对象,它被分配给某个引用,对象的引用计数变为1。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收。
然而,减肥是个昂贵而费力的事情。垃圾回收时,Python不能进行其它的任务。频繁的垃圾回收将大大降低Python的工作效率。如果内存中的对象不多,就没有必要总启动垃圾回收。
所以,Python只会在特定条件下,自动启动垃圾回收。当Python运行时,会记录其中分配对象(object
allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。
我们可以通过gc模块的get_threshold()方法,查看该阈值。
3)内存池机制
Python中有分为大内存和小内存:(256K为界限分大小内存)
1、大内存使用malloc进行分配
2、小内存使用内存池进行分配
python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256K时,pymalloc会在内存池中申请内存空间;当大于256K时,则会直接执行系统的malloc的行为来申请内存空间。
当Python作为系统服务时,可能无法获取系统变量。这是因为服务程序在启动时,并没有像一般程序一样把系统变量加载到内存里,所以Python也无法使用它们。如果要解决此问题,可以尝试在服务启动前显式地加载系统变量,然后才启动Python服务。
以上就是关于psutil之cpu、memory、disk解析全部的内容,包括:psutil之cpu、memory、disk解析、查看变量内存地址的python内置函数、python读取cpu温度和占用率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)