python如何為創(chuàng)建大量實(shí)例節(jié)省內(nèi)存
python如何為創(chuàng)建大量實(shí)例節(jié)省內(nèi)存,具體內(nèi)容如下
案例:
某網(wǎng)絡(luò)游戲中,定義了玩家類Player(id, name, status,....),每有一個(gè)在線玩家,在服務(wù)器程序內(nèi)有一個(gè)Player的實(shí)例,當(dāng)在線人數(shù)很多時(shí),將產(chǎn)生大量實(shí)例(百萬(wàn)級(jí)別)
需求:
如何降低這些大量實(shí)例的內(nèi)存開銷?
如何做?
首先要明白,python中的類可以動(dòng)態(tài)的添加屬性,實(shí)則在內(nèi)存中有個(gè)__dict__方法維護(hù)了這種動(dòng)態(tài)添加屬性,它占有內(nèi)存,把它關(guān)掉,不就達(dá)到省內(nèi)存要求了?
#!/usr/bin/python3 import time import sys class Player(object): def __init__(self, id, name, status): self.id = id self.name = name self.status = status if __name__ == '__main__': player_1 = Player(1, 'bei_bei', '上線') print(player_1.__dict__) print('_' * 100) # 動(dòng)態(tài)裝配屬性 player_1.money = 10000 player_1.__dict__['time'] = time.time() print(player_1.__dict__) print(player_1.money, player_1.time) print('_' * 100) # 打印__dict__占用的內(nèi)存空間 print('dict方法占用內(nèi)存:', sys.getsizeof(player_1.__dict__)) print('_'*100) # 動(dòng)態(tài)刪除屬性 print(player_1.__dict__) del player_1.__dict__['time'] del player_1.money print(player_1.__dict__)
通過(guò)__slots__屬性,聲明實(shí)例屬性名字的列表
#!/usr/bin/python3 class Player(object): # 通過(guò)slots方法指定類的定長(zhǎng)屬性 __slots__ = ['id', 'name', 'status'] def __init__(self, id, name, status): self.id = id self.name = name self.status = status if __name__ == '__main__': player_1 = Player(1, 'bei_bei', '上線') print(player_1.id, player_1.name, player_1.status) # 嘗試輸出__dict__屬性,發(fā)現(xiàn)沒有,就無(wú)法動(dòng)態(tài)的裝配類屬性,達(dá)到省內(nèi)存的目的 try: print(player_1.__dict__) except Exception as e: print(e)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用memory_profiler監(jiān)測(cè)python代碼運(yùn)行時(shí)內(nèi)存消耗方法
- 記一次python 內(nèi)存泄漏問題及解決過(guò)程
- python清除函數(shù)占用的內(nèi)存方法
- python實(shí)現(xiàn)內(nèi)存監(jiān)控系統(tǒng)
- python 基本數(shù)據(jù)類型占用內(nèi)存空間大小的實(shí)例
- python中使用psutil查看內(nèi)存占用的情況
- python 實(shí)時(shí)得到cpu和內(nèi)存的使用情況方法
- 對(duì)python程序內(nèi)存泄漏調(diào)試的記錄
- python如何在循環(huán)引用中管理內(nèi)存
- Python獲取CPU、內(nèi)存使用率以及網(wǎng)絡(luò)使用狀態(tài)代碼
- Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法
相關(guān)文章
Python中cv2.Canny() 函數(shù)使用方法
cv2.Canny() 函數(shù)是 OpenCV 中的邊緣檢測(cè)函數(shù)之一,用于檢測(cè)圖像的邊緣,它的基本原理是通過(guò)計(jì)算圖像中每個(gè)像素點(diǎn)的梯度值來(lái)檢測(cè)邊緣,本文通過(guò)示例代碼介紹Python中cv2.Canny() 函數(shù)用法,需要的朋友參考下吧2023-07-07使用Python腳本和ADB命令實(shí)現(xiàn)卸載App
這篇文章主要介紹了使用Python腳本和ADB命令實(shí)現(xiàn)卸載App的實(shí)現(xiàn)方法,文中給出了完整的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02Python Pygame實(shí)戰(zhàn)之憤怒的小鳥游戲?qū)崿F(xiàn)
《憤怒的小鳥》其實(shí)活得還不錯(cuò),盡管我們一直在嘲笑它的IP帝國(guó)夢(mèng)做得太大。但要知道,把休閑益智游戲的生意做到這個(gè)份上的,恐怕也就獨(dú)此一家了。本文將利用Pygame實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-04-04python如何實(shí)現(xiàn)異步調(diào)用函數(shù)執(zhí)行
這篇文章主要介紹了python如何實(shí)現(xiàn)異步調(diào)用函數(shù)執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作新聞分類
本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,開始我們自然語(yǔ)言處理 (NLP) 的學(xué)習(xí)旅程. 本文主要學(xué)習(xí)NLP自然語(yǔ)言處理基本操作新聞分類2021-09-09Python函數(shù)中參數(shù)是傳遞值還是引用詳解
這篇文章主要介紹了深入了解Python函數(shù)中參數(shù)是傳值還是傳引用,在 C/C++ 中,傳值和傳引用是函數(shù)參數(shù)傳遞的兩種方式,在Python中參數(shù)是如何傳遞的,需要的朋友可以參考下2019-07-07