国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過Python的__slots__節省9GB內存

EastWoodYang / 925人閱讀

摘要:我們之前提到過,基于的服務器緩存了大量字典哈希表的靜態內容。好啦,我們最近使用一行代碼在我們的類中使用,使得每個的服務器在處理中都節省超過內存。一般說來,這很不錯,而且還支持完全動態性,比如在運行時設置任意新的屬性。

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

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

我們大概分配了一百萬個下面這個類的實例:

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

    # ... other methods ...

Python默認使用一個字典來存儲一個對象的實例屬性。一般說來,這很不錯,而且還支持完全動態性,比如在運行時設置任意新的屬性。

然而,對于一個“小類”來說,有一些在“編譯時”就已經固定的屬性,這樣一來,字典實際上是在消耗內存,在創建一百萬個這樣的類的時候,消耗更是顯而易見。你可以跟Python說不使用字典,而是僅為某些固定的屬性分配空間,可以通過在類中將__slots__設置為一個固定列表來實現這個效果:

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 ...

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

警告:別過早優化或者將此應用在所有場景!這個方法并不利于代碼維護,而且在你真的有成千個實例的時候才有顯著效果。

來自:Saving 9 GB of RAM with Python’s __slots__

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45329.html

相關文章

  • 編寫符合Python風格對象

    摘要:自定義向量類型從自定義向量類型入手寫出符合風格的對象,這離不開特殊方法的支持。將對象定為不可變的通過使用兩個前導下劃線。程序員約定使用一個下劃線前綴編寫受保護的屬性即,他們認為應該使用命名約定來避免意外覆蓋屬性。 導語:本文章記錄了本人在學習Python基礎之面向對象篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握編寫Pythonic c...

    ethernet 評論0 收藏0
  • 如何優化Python占用內存

    摘要:概述如果程序處理的數據比較多比較復雜,那么在程序運行的時候,會占用大量的內存,當內存占用到達一定的數值,程序就有可能被操作系統終止,特別是在限制程序所使用的內存大小的場景,更容易發生問題。下面我就給出幾個優化占用內存的幾個方法。 概述 如果程序處理的數據比較多、比較復雜,那么在程序運行的時候,會占用大量的內存,當內存占用到達一定的數值,程序就有可能被操作系統終止,特別是在限制程序所使用...

    ThreeWords 評論0 收藏0
  • Python學習之路28-符合Python風格對象

    摘要:本篇繼續學習之路,實現更多的特殊方法以讓自定義類的行為跟真正的對象一樣。之所以要讓向量不可變,是因為我們在計算向量的哈希值時需要用到和的哈希值,如果這兩個值可變,那向量的哈希值就能隨時變化,這將不是一個可散列的對象。 《流暢的Python》筆記。本篇是面向對象慣用方法的第二篇。前一篇講的是內置對象的結構和行為,本篇則是自定義對象。本篇繼續Python學習之路20,實現更多的特殊方法以讓...

    Eric 評論0 收藏0
  • classmethod&staticmethod 以及 __slots__

    摘要:什么是中的它的用途是什么裝飾器對應的函數不需要實例化,不需要參數,但第一個參數需要是表示自身類的參數,可以來調用類的屬性,類的方法,實例化對象等。 什么是python中的classmethod,它的用途是什么? classmethod裝飾器對應的函數不需要實例化,不需要 self 參數,但第一個參數需要是表示自身類的 cls 參數,可以來調用類的屬性,類的方法,實例化對象等。 cl...

    newsning 評論0 收藏0
  • 流暢python讀書筆記-第九章-符合Python風格對象

    摘要:以便于用戶理解的方式返回對象的字符串表示形式。函數會調用函數,對來說,輸出的是一個有序對。此外,還有用于支持內置的構造函數的方法??缮⒘袑崿F了方法,使用推薦的異或運算符計算實例屬性的散列值私有屬性最好用命名規則來實現這種方式有好有壞 絕對不要使用兩個前導下劃線,這是很煩人的自私行為?!狪an Bicking 對象表示形式 repr()  以便于開發者理解的方式返回對象的字符串表示形式...

    fai1017 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<