成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

通過(guò)Python的__slots__節(jié)省9GB內(nèi)存

EastWoodYang / 985人閱讀

摘要:我們之前提到過(guò),基于的服務(wù)器緩存了大量字典哈希表的靜態(tài)內(nèi)容。好啦,我們最近使用一行代碼在我們的類中使用,使得每個(gè)的服務(wù)器在處理中都節(jié)省超過(guò)內(nèi)存。一般說(shuō)來(lái),這很不錯(cuò),而且還支持完全動(dòng)態(tài)性,比如在運(yùn)行時(shí)設(shè)置任意新的屬性。

我們之前提到過(guò),Oyster.com基于Python的web服務(wù)器緩存了大量Python字典(dicts)(哈希表(hash tables))的靜態(tài)內(nèi)容。好啦,我們最近使用一行代碼——在我們的Image類中使用__slots__,使得每個(gè)6GB的服務(wù)器在處理中都節(jié)省超過(guò)2GB內(nèi)存。

這是使用前和使用這一改變后再部署的RAM用量截圖:

我們大概分配了一百萬(wàn)個(gè)下面這個(gè)類的實(shí)例:

pythonclass Image(object):
    def __init__(self, id, caption, url):
        self.id = id
        self.caption = caption
        self.url = url
        self._setup()

    # ... other methods ...

Python默認(rèn)使用一個(gè)字典來(lái)存儲(chǔ)一個(gè)對(duì)象的實(shí)例屬性。一般說(shuō)來(lái),這很不錯(cuò),而且還支持完全動(dòng)態(tài)性,比如在運(yùn)行時(shí)設(shè)置任意新的屬性。

然而,對(duì)于一個(gè)“小類”來(lái)說(shuō),有一些在“編譯時(shí)”就已經(jīng)固定的屬性,這樣一來(lái),字典實(shí)際上是在消耗內(nèi)存,在創(chuàng)建一百萬(wàn)個(gè)這樣的類的時(shí)候,消耗更是顯而易見(jiàn)。你可以跟Python說(shuō)不使用字典,而是僅為某些固定的屬性分配空間,可以通過(guò)在類中將__slots__設(shè)置為一個(gè)固定列表來(lái)實(shí)現(xiàn)這個(gè)效果:

pythonclass Image(object):
    __slots__ = ["id", "caption", "url"]

    def __init__(self, id, caption, url):
        self.id = id
        self.caption = caption
        self.url = url
        self._setup()

    # ... other methods ...

需要特別說(shuō)到的是,你也可以使用 collections.namedtuple,它僅限定元組空間(the space of a tuple)中的屬性能夠訪問(wèn),這與在類中使用__slots__相似。但是,在我看來(lái),從一個(gè)命名元組(namedtuple)類中繼承令人感到怪異。并且,如果你想自定義初始化器(initializer),你還必須重寫__new__而不是用__init__

警告:別過(guò)早優(yōu)化或者將此應(yīng)用在所有場(chǎng)景!這個(gè)方法并不利于代碼維護(hù),而且在你真的有成千個(gè)實(shí)例的時(shí)候才有顯著效果。

來(lái)自:Saving 9 GB of RAM with Python’s __slots__

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45329.html

相關(guān)文章

  • 編寫符合Python風(fēng)格對(duì)象

    摘要:自定義向量類型從自定義向量類型入手寫出符合風(fēng)格的對(duì)象,這離不開特殊方法的支持。將對(duì)象定為不可變的通過(guò)使用兩個(gè)前導(dǎo)下劃線。程序員約定使用一個(gè)下劃線前綴編寫受保護(hù)的屬性即,他們認(rèn)為應(yīng)該使用命名約定來(lái)避免意外覆蓋屬性。 導(dǎo)語(yǔ):本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之面向?qū)ο笃闹攸c(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來(lái)一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、掌握編寫Pythonic c...

    ethernet 評(píng)論0 收藏0
  • 如何優(yōu)化Python占用內(nèi)存

    摘要:概述如果程序處理的數(shù)據(jù)比較多比較復(fù)雜,那么在程序運(yùn)行的時(shí)候,會(huì)占用大量的內(nèi)存,當(dāng)內(nèi)存占用到達(dá)一定的數(shù)值,程序就有可能被操作系統(tǒng)終止,特別是在限制程序所使用的內(nèi)存大小的場(chǎng)景,更容易發(fā)生問(wèn)題。下面我就給出幾個(gè)優(yōu)化占用內(nèi)存的幾個(gè)方法。 概述 如果程序處理的數(shù)據(jù)比較多、比較復(fù)雜,那么在程序運(yùn)行的時(shí)候,會(huì)占用大量的內(nèi)存,當(dāng)內(nèi)存占用到達(dá)一定的數(shù)值,程序就有可能被操作系統(tǒng)終止,特別是在限制程序所使用...

    ThreeWords 評(píng)論0 收藏0
  • Python學(xué)習(xí)之路28-符合Python風(fēng)格對(duì)象

    摘要:本篇繼續(xù)學(xué)習(xí)之路,實(shí)現(xiàn)更多的特殊方法以讓自定義類的行為跟真正的對(duì)象一樣。之所以要讓向量不可變,是因?yàn)槲覀冊(cè)谟?jì)算向量的哈希值時(shí)需要用到和的哈希值,如果這兩個(gè)值可變,那向量的哈希值就能隨時(shí)變化,這將不是一個(gè)可散列的對(duì)象。 《流暢的Python》筆記。本篇是面向?qū)ο髴T用方法的第二篇。前一篇講的是內(nèi)置對(duì)象的結(jié)構(gòu)和行為,本篇?jiǎng)t是自定義對(duì)象。本篇繼續(xù)Python學(xué)習(xí)之路20,實(shí)現(xiàn)更多的特殊方法以讓...

    Eric 評(píng)論0 收藏0
  • classmethod&staticmethod 以及 __slots__

    摘要:什么是中的它的用途是什么裝飾器對(duì)應(yīng)的函數(shù)不需要實(shí)例化,不需要參數(shù),但第一個(gè)參數(shù)需要是表示自身類的參數(shù),可以來(lái)調(diào)用類的屬性,類的方法,實(shí)例化對(duì)象等。 什么是python中的classmethod,它的用途是什么? classmethod裝飾器對(duì)應(yīng)的函數(shù)不需要實(shí)例化,不需要 self 參數(shù),但第一個(gè)參數(shù)需要是表示自身類的 cls 參數(shù),可以來(lái)調(diào)用類的屬性,類的方法,實(shí)例化對(duì)象等。 cl...

    newsning 評(píng)論0 收藏0
  • 流暢python讀書筆記-第九章-符合Python風(fēng)格對(duì)象

    摘要:以便于用戶理解的方式返回對(duì)象的字符串表示形式。函數(shù)會(huì)調(diào)用函數(shù),對(duì)來(lái)說(shuō),輸出的是一個(gè)有序?qū)Α4送?,還有用于支持內(nèi)置的構(gòu)造函數(shù)的方法??缮⒘袑?shí)現(xiàn)了方法,使用推薦的異或運(yùn)算符計(jì)算實(shí)例屬性的散列值私有屬性最好用命名規(guī)則來(lái)實(shí)現(xiàn)這種方式有好有壞 絕對(duì)不要使用兩個(gè)前導(dǎo)下劃線,這是很煩人的自私行為。——Ian Bicking 對(duì)象表示形式 repr()  以便于開發(fā)者理解的方式返回對(duì)象的字符串表示形式...

    fai1017 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<