當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程語言 » python查看內存

python查看內存-ag真人国际官网

發布時間: 2024-06-26 09:15:18

1. 鏌ョ湅鍙橀噺鍐呭瓨鍦板潃鐨刾ython鍐呯疆鍑芥暟

鏌ョ湅python鍐呯疆鍑芥暟鐨勬柟娉曪細1銆佹墦寮pythonidle緙栬緫鍣錛2銆佽緭鍏"dir(__builtins__)"鍛戒護錛屾寜涓嬪洖杞﹂敭(enter)寰楀埌python鍏ㄩ儴鍐呯疆鍙橀噺鍜屽嚱鏁般
鎵撳紑pythonidle錛屾垜鐢ㄧ殑鏄疨ython3銆7錛岀晫闈㈡湁涓鎬у畾鍒躲備綘鐨勭増鏈涓嶅悓錛岀晫闈㈡湁宸寮傦紝浣嗘槸鎿嶄綔鏂規硶搴旇ユ槸涓鏍風殑銆傝緭鍏dir(__builtins__)銆
鍙浠ョ湅鍒幫紝榪斿洖鐨勭粨鏋滄槸浠[寮澶翠互]緇撳熬錛岃存槑鏄涓鍒楄〃錛岃緭鍏ワ細len(dir(__builtins__))銆
鎸変笅涓ゆ″洖杞﹂敭(enter)銆傛寜鐓ч粯璁ょ殑瀛楁瘝欏哄簭錛屽厛鏄澶у啓瀛楁瘝a-z錛岀劧鍚庢槸涓嬪垝綰(_)寮澶寸殑錛岀劧鍚庢槸灝忓啓瀛楁瘝a-z銆

2. python查看對象內存地址的函數

在python中可以用id()函數獲取對象的內存地址。
#例如:
object = 1 2
print(id(object)) #4304947776

3. python怎樣獲得當前系統的cpu頻率和內存使用情況

如果想自己寫程序來實現的話,可以參考它們的源碼
top/free都是在procps包中(apt-get source procps)。
找到cpus_refresh()函數,你可以看到它是怎樣從/proc/stat解析出cpu的使用率的。meminfo()函數則展示了如何從/proc/meminfo解析出內存的使用率(這個文件自己解析也很簡單)。

4. 如何使用python動態控制linux系統的內存佔用百分比

如何使用python動態控制linux系統的內存佔用百分比?

近期有網上朋友尋求幫助:如何通過腳本動態控制linux系統的內存佔用百分比?經過一番網路 編寫調試,終於初步完成了動態控制linux系統內存佔用百分比。現寫出來以幫助更多的朋友。
1 前言
根據需求是動態控制linux系統內存佔用百分比,比如當前內存佔用30%,如果設置內存佔用為70%,則需要申請內存使達到佔用70%;如果再降低到40%,則需要釋放部分申請的內存。其實腳本的本質是內存動態申請與釋放。
注意:因為python腳本運行之前內存有一定佔用,故設定內存佔用不能低於該百分比。
2 內存動態申請
通過查詢資料,使用python動態申請內存塊,可以使用ctypes包中的函數,導入包及代碼如下所示:
>>> from ctypes import *
>>> mem=create_string_buffer(1024)
說明:內存申請使用create_string_buffer()函數,上面申請了1024位元組的內存塊。
下面演示申請100mb內存前後變化
申請前如下圖所示:

使用代碼如下:
>>>mem=create_string_buffer(104857600)
申請後如下圖所示:

從上述兩幅圖中可以看出,申請內存前內存佔用295mb,申請後內存佔用397mb,增加了約100mb內存佔用。
3 內存動態釋放
由於python對內存是有垃圾回收機制的,採用對象引用計數方式。當對象的引用計數為0時,啟動垃圾回收gc。此處內存動態釋放就是使用該原理。
代碼如下:
>>> mem=none
釋放後內存佔用如下圖所示:

內存佔用由397mb降低到297mb,釋放了100mb內存佔用。
說明:將none賦值給對象mem後,mem對象的引用計數即為0,此時垃圾回收啟動,釋放mem對象佔用的內存。
4 系統總內存、佔用內存檢測
由於需要設定內存佔用百分比,故需要獲取系統總物理內存和佔用內存。本文使用的方法是讀取系統文件「/proc/meminfo」,從中解析出總內存大小以及當前內存佔用大小等內存相關的信息。該文件內容格式如下圖所示:

代碼片段如下所示:
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['memused']= mem['memtotal']- mem['memfree']
說明:按行讀取meminfo文件內容,創建字典對象mem,將meminfo文件第一列設置為mem對象的鍵值,將meminfo文件第二列數字設置為mem對象的值。
5 獲取用戶輸入百分比
通過讀取鍵盤輸入字元串,然後轉換為數字實現接收用戶輸入的百分比,代碼如下所示:
input_str=raw_input("input usedmemory`s rate or q to exit:")
rate=float(input_str)
注意:此處鍵盤輸入的都是字元串,需要進行字元串轉換為數字,使用float()或long()函數進行轉換。
6 動態設置內存佔用百分比測試
測試使用兩個python腳本文件,分別是test.py和mem_rate.py,其功能分別是查看當前內存佔用和動態設定內存佔用百分比。如下圖所示:

注意:上述兩個文件需要使用「chmod x *.py」修改為可執行屬性。
6.1 查看當前內存佔用
查看當前內存佔用百分比,使用上述test.py文件,運行命令為「./test.py」,運行結果如下圖所示:

當前使用內存為320mb,佔用百分比為17%。
6.2 動態設置內存佔用百分比
動態設置內存佔用百分比使用上述mem_rate.py腳本,注意該腳本文件第一行代碼為「#!/usr/bin/python2.6」,表示該腳本使用python2.6程序運行。該行需要修改為待運行linux系統中python實際的安裝程序路徑。
動態內存百分比設置界面如下圖所示:

處於待輸入狀態。另外顯示了當前內存佔用(321mb),總內存大小(1869mb)以及內存佔用百分比(17%)。
如果此時設置內存佔用百分比為80%,則腳本會每次申請10mb空間,直至內存佔用接近或等於80%為止。如下圖所示:

內存申請過程如下圖所示:

內存申請過程中佔用百分比變化為:35%,45%,56%,70%,…
mem_rate.py運行過程如下圖所示:

內存申請過程中佔用變化為:1461mb,1471mb,1481mb,1491mb。
此時如果內存佔用百分比設置為20%,則需要釋放一部分內存。
test.py腳本運行過程如下圖所示:
由於釋放內存運行較快,抓取到最後結果

內存佔用為20%。
mem_rate.py腳本運行過程如下圖所示:

內存釋放過程中內存佔用為:413mb,403mb,393mb,383mb,最後內存佔用穩定在20%,383mb。
輸入「q」或「q」退出內存佔用百分比設定過程,如下圖所示:

此時內存佔用如下圖所示:

內存佔用恢復到運行mem_rate.py腳本之前狀態,17%,321mb。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
附:完整python腳本代碼
test.py
------------------------------------------------------------------------------------------------
#!/usr/bin/python2.6
def memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['memused']= mem['memtotal']- mem['memfree']
# - mem['buffers']- mem['cached']
return mem

mem=memory_stat()
print("used(mb):%d"%(long(mem['memused'])/1024/1024))
print("rate:%d%%"%(100*long(mem['memused'])/float(mem['memtotal'])))

§§§§§§§§§§§§§§§§§§§§§§§§§§
mem_rate.py
---------------------------------------------------
#!/usr/bin/python2.6

from ctypes import *

# get memory info(total, used... byte)
def get_memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['memused']= mem['memtotal']- mem['memfree']
# return memroyinfo object
return mem

# get simple memory info
def get_memory_info(mem):
# byte -> mb
n=1024* 1024
used=float(mem['memused'])/ n
total=float(mem['memtotal'])/ n
rate=used/total* 100
smp={'used':used,'total':total,'rate':rate}
return smp

# display current memory info
def print_memory_info(mem):
# get simplememory info
smp=get_memory_info(mem)
print("used(mb):%d\ttotal(mb):%d\tusedrate:%d%%"%(smp['used'], smp['total'], smp['rate']))

# get rate of memory used to be setted(integer formate)
def input_memory_used_rate(org_rate):
# byte -> mb
n=1024* 1024
while(true):
mem=get_memory_stat()
print_memory_info(mem)

input_str=raw_input("input usedmemory`s rate or q to exit:")
if(len(input_str)== 0):
continue
if("q"== input_str):
info={'rate':0,'used':mem['memused']/ n}
return info
if("q"== input_str):
info={'rate':0,'used':mem['memused']/ n}
return info
try:
rate=float(input_str)
if((rate>=org_rate)and (rate<=95)):
info={'rate':rate,'used':mem['memused']/ n}
return info
else:
print("please inputa valid number(%d%%~95%%)."%(org_rate))
except:
print("please inputa valid number(%d%%~95%%)."%(org_rate))

# set rate of memory used
def set_memory_used_rate(new_rate, total, pre_used,list):
if(new_rate==0):
return none
dest_mem=total* new_rate /100.0
# 10mb
mb10=10485760
n_chg=10
# free memory orallocate memory ?
is_new=dest_mem>pre_used
cur_used=pre_used
while(true):
# to calc freememory or allocate memory ?
need_new=dest_mem-n_chg>=pre_used
need_del=dest_mem n_chg<=pre_used

# need to allocatememory
if(is_new):
if(need_new):
p=create_string_buffer(mb10)
list.append(p)
dest_mem=dest_mem-n_chg
cur_used=cur_used n_chg
else:
return"end"
# need to freememory
else:
idx=len(list)-1
if(need_deland (idx>=0)):
p=list[idx]
del list[idx]
p=none
dest_mem=dest_mem n_chg
cur_used=cur_used-n_chg
else:
return"end"
print("****** memoryused(mb):%d"%(cur_used))

# entry of program

# list of memory object, 10mb of one object
list=[]
# get current memory info
mem=get_memory_stat()
# get simple memory info
smp=get_memory_info(mem)
org_rate=smp['rate']
total=smp['total']

while(true):
# get rate ofmemory to be used
info=input_memory_used_rate(org_rate)
new_rate=float(info['rate'])
pre_used=float(info['used'])
# set rate ofmemory to be used
rtn=set_memory_used_rate(new_rate, total, pre_used, list)
if(not rtn):
print("bye!")
exit()

5. python 查看變數佔用了多少內存

s='abc'
printsys.getsizeof(s)

如果你要監測所有的變數,可以用python的smiley 模塊監測所有的內存變數情況

6. 7種檢測python程序運行時間、cpu和內存佔用的方法

1. 使用裝飾器來衡量函數執行時間

有一個簡單方法,那就是定義一個裝飾器來測量函數的執行時間,並輸出結果:

import time

from functoolsimport wraps

import random

def fn_timer(function):

  @wraps(function)

  def function_timer(*args, **kwargs):

      t0= time.time()

      result= function(*args, **kwargs)

      t1= time.time()

      print("total time running %s: %s seconds" %

          (function.__name__, str(t1- t0))

)

      return result

return function_timer

@fn_timer

def random_sort(n):

  return sorted([random.random() for i in range(n)])

if __name__== "__main__":

  random_sort(2000000)

輸出:total time running random_sort: 0.6598007678985596 seconds

使用方式的話,就是在要監控的函數定義上面加上 @fn_timer 就行了

或者

# 可監控程序運行時間

import time

import random

def clock(func):

    def wrapper(*args, **kwargs):

        start_time= time.time()

        result= func(*args, **kwargs)

        end_time= time.time()

        print("共耗時: %s秒" % round(end_time- start_time, 5))

        return result

return wrapper

@clock

def random_sort(n):

  return sorted([random.random() for i in range(n)])

if __name__== "__main__":

  random_sort(2000000)

輸出結果:共耗時: 0.65634秒

2. 使用timeit模塊

另一種方法是使用timeit模塊,用來計算平均時間消耗。

執行下面的腳本可以運行該模塊。

這里的timing_functions是python腳本文件名稱。

在輸出的末尾,可以看到以下結果:4 loops, best of 5: 2.08 sec per loop

這表示測試了4次,平均每次測試重復5次,最好的測試結果是2.08秒。

如果不指定測試或重復次數,默認值為10次測試,每次重復5次。

3. 使用unix系統中的time命令

然而,裝飾器和timeit都是基於python的。在外部環境測試python時,unix time實用工具就非常有用。

運行time實用工具:

輸出結果為:

total time running random_sort: 1.3931210041 seconds

real 1.49

user 1.40

sys 0.08

第一行來自預定義的裝飾器,其他三行為:

    real表示的是執行腳本的總時間

    user表示的是執行腳本消耗的cpu時間。

    sys表示的是執行內核函數消耗的時間。

注意:根據維基網路的定義,內核是一個計算機程序,用來管理軟體的輸入輸出,並將其翻譯成cpu和其他計算機中的電子設備能夠執行的數據處理指令。

因此,real執行時間和user sys執行時間的差就是消耗在輸入/輸出和系統執行其他任務時消耗的時間。

4. 使用cprofile模塊

5. 使用line_profiler模塊

6. 使用memory_profiler模塊

7. 使用guppy包

熱點內容
phpjava交互 發布:2024-07-17 16:58:57 瀏覽:356
resin下jsp不能正常編譯 發布:2024-07-17 16:34:44 瀏覽:229
sqlserver如何切換主備伺服器 發布:2024-07-17 16:23:02 瀏覽:299
mc18伺服器ip 發布:2024-07-17 16:23:02 瀏覽:379
仙境傳說手游腳本 發布:2024-07-17 16:09:24 瀏覽:691
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:375
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:955
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:130
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:388
安卓系統視頻製作哪個好用 發布:2024-07-17 15:10:47 瀏覽:210
网站地图