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