溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么使用python獲取cpu每秒的使用率

發(fā)布時(shí)間:2022-05-16 13:51:22 來源:億速云 閱讀:249 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下怎么使用python獲取cpu每秒的使用率的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

獲取cpu每秒的使用率

要求

請獲取某段時(shí)間的cpu的占有率,以持久化形式保存。

代碼:

import psutil
import time
# cpu_res = psutil.cpu_percent()
# print(cpu_res)
# 每一秒獲取獲取cpu的占有率 --->持久化保存
# 如何將時(shí)間和對應(yīng)的cpu占有率去匹配
while True:
    # 獲取當(dāng)前時(shí)間和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模塊表示獲取本機(jī)的硬件信息

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

3.用元組時(shí)間可以準(zhǔn)確獲取自己想獲得的時(shí)、分、秒

4.將時(shí)間——>cpu占有率寫入文件cpu.txt中。

5.time.sleep(1) 表示休眠時(shí)間,等待1秒再執(zhí)行。

輸出結(jié)果:

怎么使用python獲取cpu每秒的使用率

在cpu.txt文件中

怎么使用python獲取cpu每秒的使用率

python充分利用cpu

當(dāng)利用python處理大規(guī)模數(shù)據(jù)或者運(yùn)行一些耗時(shí)較長的程序時(shí),往往會發(fā)現(xiàn)程序運(yùn)行時(shí)CPU并沒有跑滿,哪怕開了多線程后CPU利用率仍然不高。

這是因?yàn)樵谀J(rèn)情況下,Python 程序是單個(gè)進(jìn)程,使用單 CPU 核心執(zhí)行,這意味著多核處理器只使用了一個(gè)核。

「一核有難九核圍觀」意味著超過 50% 的算力都會被浪費(fèi)。這篇文章將介紹如何解決這種情況。

多線程無法增加cpu使用率的原因

GIL 的全程為 Global Interpreter Lock ,意即全局解釋器鎖。

在 Python 語言的主流實(shí)現(xiàn) CPython 中,GIL 是一個(gè)貨真價(jià)實(shí)的全局線程鎖,在解釋器解釋執(zhí)行任何 Python 代碼時(shí),都需要先獲得這把鎖才行,在遇到 I/O 操作時(shí)會釋放這把鎖。

如果是純計(jì)算的程序,沒有 I/O 操作,解釋器會每隔 100 次操作就釋放這把鎖,讓別的線程有機(jī)會執(zhí)行(這個(gè)次數(shù)可以通過 sys.setcheckinterval 來調(diào)整)。

所以雖然 CPython 的線程庫直接封裝操作系統(tǒng)的原生線程,但 CPython 進(jìn)程做為一個(gè)整體,同一時(shí)間只會有一個(gè)獲得了 GIL 的線程在跑,其它的線程都處于等待狀態(tài)等著 GIL 的釋放。

這就意味著哪怕開了多線程CPU使用率仍然不會很高。

如何充分使用多核跑程序

有三個(gè)辦法

1. multiprocessing

multiprocessing 是多進(jìn)程標(biāo)準(zhǔn)庫,讓多進(jìn)程的 python 程序編寫簡化到類似多線程的程度,通過多進(jìn)程的方式使用多個(gè)CPU核心。

2. C 語言擴(kuò)展機(jī)制

如果不想用多進(jìn)程這樣重量級的解決方案,可以改用 C/C++。當(dāng)然,你也不用做的這么絕,只需要把關(guān)鍵部分用 C/C++ 寫成 Python 擴(kuò)展,其它部分還是用 Python 來寫,讓 Python 的歸 Python,C 的歸 C。一般計(jì)算密集性的程序都會用 C 代碼編寫并通過擴(kuò)展的方式集成到 Python 腳本里(如 NumPy 模塊)。這樣在擴(kuò)展里就完全可以用 C 創(chuàng)建原生線程,就可以充分利用 CPU 的計(jì)算資源了。

3. ctypes

不過,寫 Python 擴(kuò)展總是讓人覺得很復(fù)雜。好在 Python 還有另一種與 C 模塊進(jìn)行互通的機(jī)制 : ctypes。ctypes 與 Python 擴(kuò)展不同,它可以讓 Python 直接調(diào)用任意的 C 動態(tài)庫的導(dǎo)出函數(shù)。你所要做的只是用 ctypes 寫些 python 代碼即可。

以上就是“怎么使用python獲取cpu每秒的使用率”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI