python如何為創(chuàng)建大量實(shí)例節(jié)省內(nèi)存
python如何為創(chuàng)建大量實(shí)例節(jié)省內(nèi)存,具體內(nèi)容如下
案例:
某網(wǎng)絡(luò)游戲中,定義了玩家類(lèi)Player(id, name, status,....),每有一個(gè)在線玩家,在服務(wù)器程序內(nèi)有一個(gè)Player的實(shí)例,當(dāng)在線人數(shù)很多時(shí),將產(chǎn)生大量實(shí)例(百萬(wàn)級(jí)別)
需求:
如何降低這些大量實(shí)例的內(nèi)存開(kāi)銷(xiāo)?
如何做?
首先要明白,python中的類(lèi)可以動(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方法指定類(lèi)的定長(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)沒(méi)有,就無(wú)法動(dòng)態(tài)的裝配類(lè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)存泄漏問(wèn)題及解決過(guò)程
- python清除函數(shù)占用的內(nèi)存方法
- python實(shí)現(xiàn)內(nèi)存監(jiān)控系統(tǒng)
- python 基本數(shù)據(jù)類(lèi)型占用內(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)文章
TensorFlow自定義模型保存加載和分布式訓(xùn)練
本篇文章將涵蓋 TensorFlow 的高級(jí)應(yīng)用,包括如何自定義模型的保存和加載過(guò)程,以及如何進(jìn)行分布式訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
python網(wǎng)絡(luò)爬蟲(chóng)之協(xié)程的實(shí)現(xiàn)方法
這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲(chóng)之協(xié)程的實(shí)現(xiàn)方法,協(xié)程Coroutine又稱微線程,是一種用戶態(tài)內(nèi)的上下文切換技術(shù),簡(jiǎn)而言之,就是通過(guò)一個(gè)線程實(shí)現(xiàn)代碼塊相互切換執(zhí)行,需要的朋友可以參考下2023-08-08
keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式
這篇文章主要介紹了keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
基于Flask框架添加多個(gè)AI模型的API并進(jìn)行交互
這篇文章主要介紹了如何基于 Flask 框架開(kāi)發(fā) AI 模型 API 管理系統(tǒng),允許用戶添加、刪除不同 AI 模型的 API 密鑰,感興趣的可以了解下2025-03-03
基于Python實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)功能詳解
這篇文章主要為大家介紹了基于Python如何實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)的功能,文章的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的朋友可以學(xué)習(xí)一下2021-12-12
利用Python實(shí)現(xiàn)智能合約的示例詳解
智能合約是一種由計(jì)算機(jī)程序編寫(xiě)的自動(dòng)化合約,它可以在沒(méi)有第三方干預(yù)的情況下執(zhí)行交易和契約條款。這篇文章主要介紹了如何利用Python實(shí)現(xiàn)智能合約,需要的可以參考一下2023-04-04

