脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 使用python获取cpu每秒的使用率

使用python获取cpu每秒的使用率

2023-01-28 13:59Kaiser king Python

这篇文章主要介绍了使用python获取cpu每秒的使用率,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

获取cpu每秒的使用率

要求

请获取某段时间的cpu的占有率,以持久化形式保存。

代码:

import psutil
import time
# cpu_res = psutil.cpu_percent()
# print(cpu_res)
# 每一秒获取获取cpu的占有率 --->持久化保存
# 如何将时间和对应的cpu占有率去匹配
while True:
  # 获取当前时间和cpu的占有率
  t = time.localtime()
  cpu_time = '%d:%d:%d' % (t.tm_hour, t.tm_min, t.tm_sec)
  cpu_res = psutil.cpu_percent()
  print(cpu_res)
  # 保存在文件中
  with open('cpu.txt', 'a+') as f:
      f.write('%s %s \n' % (cpu_time, cpu_res))
  time.sleep(1)

1.psutil模块表示获取本机的硬件信息

2.psutil.cpu_percent表示获取cpu的占有率

3.用元组时间可以准确获取自己想获得的时、分、秒

4.将时间——>cpu占有率写入文件cpu.txt中。

5.time.sleep(1) 表示休眠时间,等待1秒再执行。

输出结果:

使用python获取cpu每秒的使用率

在cpu.txt文件中

使用python获取cpu每秒的使用率

 

python充分利用cpu

当利用python处理大规模数据或者运行一些耗时较长的程序时,往往会发现程序运行时CPU并没有跑满,哪怕开了多线程后CPU利用率仍然不高。

这是因为在默认情况下,Python 程序是单个进程,使用单 CPU 核心执行,这意味着多核处理器只使用了一个核。

「一核有难九核围观」意味着超过 50% 的算力都会被浪费。这篇文章将介绍如何解决这种情况。

多线程无法增加cpu使用率的原因

GIL 的全程为 Global Interpreter Lock ,意即全局解释器锁。

在 Python 语言的主流实现 CPython 中,GIL 是一个货真价实的全局线程锁,在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。

如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行(这个次数可以通过 sys.setcheckinterval 来调整)。

所以虽然 CPython 的线程库直接封装操作系统的原生线程,但 CPython 进程做为一个整体,同一时间只会有一个获得了 GIL 的线程在跑,其它的线程都处于等待状态等着 GIL 的释放。

这就意味着哪怕开了多线程CPU使用率仍然不会很高。

如何充分使用多核跑程序

有三个办法

1. multiprocessing

multiprocessing 是多进程标准库,让多进程的 python 程序编写简化到类似多线程的程度,通过多进程的方式使用多个CPU核心。

2. C 语言扩展机制

如果不想用多进程这样重量级的解决方案,可以改用 C/C++。当然,你也不用做的这么绝,只需要把关键部分用 C/C++ 写成 Python 扩展,其它部分还是用 Python 来写,让 Python 的归 Python,C 的归 C。一般计算密集性的程序都会用 C 代码编写并通过扩展的方式集成到 Python 脚本里(如 NumPy 模块)。这样在扩展里就完全可以用 C 创建原生线程,就可以充分利用 CPU 的计算资源了。

3. ctypes

不过,写 Python 扩展总是让人觉得很复杂。好在 Python 还有另一种与 C 模块进行互通的机制 : ctypes。ctypes 与 Python 扩展不同,它可以让 Python 直接调用任意的 C 动态库的导出函数。你所要做的只是用 ctypes 写些 python 代码即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_45775963/article/details/104193207

延伸 · 阅读

精彩推荐
  • PythonPycharm调试程序技巧小结

    Pycharm调试程序技巧小结

    这篇文章主要介绍了Pycharm调试程序技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...

    Lion King2422020-08-09
  • Pythonpython字符串Intern机制详解

    python字符串Intern机制详解

    这篇文章主要介绍了python字符串Intern机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...

    FOOFISH-PYTHON之禅9642021-07-27
  • Pythontensorflow实现对张量数据的切片操作方式

    tensorflow实现对张量数据的切片操作方式

    今天小编就为大家分享一篇tensorflow实现对张量数据的切片操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    ljxopencv6122020-04-11
  • Pythonpython 筛选数据集中列中value长度大于20的数据集方法

    python 筛选数据集中列中value长度大于20的数据集方法

    今天小编就为大家分享一篇python 筛选数据集中列中value长度大于20的数据集方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    lingan_Hong5962021-03-04
  • Pythonpython如何实现异步调用函数执行

    python如何实现异步调用函数执行

    这篇文章主要介绍了python如何实现异步调用函数执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    迎风而来7372021-08-04
  • PythonPython 列表排序详解

    Python 列表排序详解

    这篇文章主要介绍了Python中对列表排序实例,本文给出了9个List的排序实例,需要的朋友可以参考下,希望能够给你带来帮助...

    莫导4962022-01-21
  • Pythonmac 安装python网络请求包requests方法

    mac 安装python网络请求包requests方法

    今天小编就为大家分享一篇mac 安装python网络请求包requests方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    cwpwenwen88810052021-03-04
  • PythonPython计算两个日期相差天数的方法示例

    Python计算两个日期相差天数的方法示例

    这篇文章主要介绍了Python计算两个日期相差天数的方法,结合简单实例形式分析了Python日期时间的转换与运算相关操作技巧,需要的朋友可以参考下...

    那片依然海7512020-11-11