日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

總結python 三種常見的內存泄漏場景

瀏覽:32日期:2022-07-04 17:40:37

概要

不要以為 Python 有自動垃圾回收就不會內存泄漏,本著它有“垃圾回收”我有“垃圾代碼”的精神,現在總結一下三種常見的內存泄漏場景。

無窮大導致內存泄漏

如果把內存泄漏定義成只申請不釋放,那么借著 Python 中整數可以無窮大的這個特點,我們一行代碼就可以完成內存泄漏了。

i = 1024 ** 1024 ** 1024

循環引用導致內存泄漏

引用記數器 是 Python 垃圾回收機制的基礎,如果一個對象的引用數量不為 0 那么是不會被垃圾回收的,我們可以通過 sys.getrefcount 來得到給定對象的引用數量。

In [1]: import sys In [2]: a = {’name’:’tom’,’age’:16} In [3]: sys.getrefcount(a) # 由于 getrefcount 內部也會臨時的引用 a 所以,使得計數器的值變成了 2 。 Out[3]: 2In [4]: b = a In [5]: sys.getrefcount(a) Out[5]: 3

先來看一個循環引用的場景。

#!/usr/bin/evn python3import sysimport timeimport threadingclass Person(object): free_lock = threading.Condition() def __init__(self, name: str = ''): ''' Parameters ---------- name: str 姓名 best_friend: str 最要好的朋友名 ''' self._name = name self._best_friend = None @property def best_friend(self, person: 'Person'): return self._best_friend @best_friend.setter def best_friend(self, friend: 'Person'): self._best_friend = friend def __str__(self): ''' ''' return self._name def __del__(self): ''' ''' self.free_lock.acquire() print(f'{self._name} 要 GG 了,現在釋放它的內存空間。') sys.stderr.flush() self.free_lock.release()def mem_leak(): ''' 循環引用導致內存泄漏 ''' zhang_san = Person(name=’張三’) li_si = Person('李四') # 構造出循環引用 # 李四的好友是張三 li_si.best_friend = zhang_san # 張三的好友是李四 zhang_san.best_friend = li_siif __name__ == '__main__': for i in range(3): time.sleep(0.01) print(f'{i}') mem_leak() print('mem_leak 執行完成了.') time.sleep(5)

運行效果。

python3 main.py 012mem_leak 執行完成了.張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間。張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間。張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間

由于循環引用的存在,使得 mem_leak 函數就行執行完了其內部的局部變量引用計數器也不為 0 ,所以內存得不到及時的釋放。釋放這部分內存有兩個途徑 1、 被 Python 內部的循環檢測機制發現了; 2、進程退出前的集中釋放。

tracemalloc 可以在一定程序上幫我們發現問題,在此就不講怎么用了,我們直接上解決方案。Python 為程序員提供了弱引用,通過這種方式可以不增加對象引用計數器的數值,這成為了我們打破循環引用的一種手段。

In [1]: import sys In [2]: import weakref In [3]: from main import Person In [4]: tom = Person(’tom’) In [5]: sys.getrefcount(tom) Out[5]: 2In [6]: p = weakref.ref(tom) In [7]: sys.getrefcount(tom) # 弱引用不會增加計數器的值Out[7]: 2

現在使用 weakref 技術來改造我們的代碼。

#!/usr/bin/evn python3import sysimport timeimport weakrefimport threadingclass Person(object): free_lock = threading.Condition() def __init__(self, name: str = ''): ''' Parameters ---------- name: str 姓名 best_friend: str 最要好的朋友名 ''' self._name = name self._best_friend = None @property def best_friend(self, person: 'Person'): return self._best_friend @best_friend.setter def best_friend(self, friend: 'Person'): self._best_friend = weakref.ref(friend) def __str__(self): ''' ''' return self._name def __del__(self): ''' ''' self.free_lock.acquire() print(f'{self._name} 要 GG 了,現在釋放它的內存空間。') sys.stderr.flush() self.free_lock.release()def mem_leak(): ''' 循環引用導致內存泄漏 ''' zhang_san = Person(name=’張三’) li_si = Person('李四') # 構造出循環引用 # 李四的好友是張三 li_si.best_friend = zhang_san # 張三的好友是李四 zhang_san.best_friend = li_siif __name__ == '__main__': for i in range(3): time.sleep(0.01) print(f'{i}') mem_leak() print('mem_leak 執行完成了.') time.sleep(5)

運行效果。

python3 main.py 0張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間。1張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間。2張三 要 GG 了,現在釋放它的內存空間。李四 要 GG 了,現在釋放它的內存空間。mem_leak 執行完成了.

可以看到現在一旦函數執行完成,其內部的局部變量的內存就會得到釋放,非常的及時。

外面庫導致內存泄漏

這種情況我也只遇到過一次,之前 mysql-connector-python 的內存泄漏,導致我的程序跑著跑著占用的內存就越來越大;最后我們返的 C 語言擴展禁用之后就沒有問題了。

以上就是總結python 三種常見的內存泄漏場景的詳細內容,更多關于python 內存泄漏的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美特黄一级大片| 欧美偷窥清纯综合图区| 国产粉嫩在线观看| 精品精品99| 国产丝袜一区| 国产劲爆久久| 婷婷色综合网| 亚洲欧美久久精品| 欧美激情福利| 中文字幕高清在线播放| 亚洲激情五月| 日本不卡一区二区三区| 精品国产成人| 国产免费成人| 麻豆精品视频在线观看| 蜜桃一区二区三区| 国产麻豆一区| 蜜桃国内精品久久久久软件9| 日韩中文字幕无砖| 91看片一区| 97se亚洲| 国产一区日韩一区| 国产伦精品一区二区三区视频| 日韩一区亚洲二区| 热久久免费视频| 国产一区二区三区亚洲| 日韩精品一二三区| 中文在线免费视频| 天堂va在线高清一区| 日韩国产欧美一区二区| 日韩av成人高清| 欧美国产91| 九九九精品视频| 亚洲一区欧美| 精品亚洲美女网站| 国产精品日本一区二区三区在线| 不卡在线一区| 精品一级视频| 日韩精品第二页| 香蕉成人av| 欧美私人啪啪vps| av不卡在线看| 国产成人精品一区二区三区免费| 蜜桃一区二区三区在线| 极品av在线| 欧美日韩亚洲国产精品| 亚洲成人免费| 成人高清一区| 欧美一区影院| 亚洲欧美日韩综合国产aⅴ| 福利视频一区| 国产精品自在| 亚洲三级网站| 国产精品97| 国产成人精品福利| 欧美专区一区| 丝袜诱惑制服诱惑色一区在线观看 | 久久九九电影| 国产精品久久亚洲不卡| 蜜桃视频一区二区三区在线观看| 亲子伦视频一区二区三区| 国产精品毛片视频| 亚洲一级大片| 黄色成人在线网址| 成人羞羞视频在线看网址| 免费日韩一区二区三区| 日韩三级精品| 男人操女人的视频在线观看欧美| www成人在线视频| 成人一二三区| 久久亚洲精品中文字幕| 国产日韩一区二区三免费高清 | 日韩av午夜在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 日韩影院二区| 高清不卡一区| 成人在线免费观看网站| 嫩草伊人久久精品少妇av杨幂| 日本aⅴ免费视频一区二区三区| 日本欧洲一区二区| 亚洲免费中文| 久久亚洲图片| 六月天综合网| 亚洲午夜免费| 蜜臀精品久久久久久蜜臀| 欧美午夜不卡| 99香蕉国产精品偷在线观看| 亚洲精品一区二区妖精| 国精品一区二区| 欧美午夜精彩| 久久中文字幕二区| 激情欧美丁香| 91成人超碰| 欧美jjzz| 欧美日韩国产亚洲一区| 99视频精品全国免费| 久久婷婷丁香| 激情丁香综合| 伊人久久亚洲热| 妖精视频成人观看www| 伊人久久亚洲影院| 爽爽淫人综合网网站| 免费美女久久99| 四虎精品一区二区免费| 日本一区二区中文字幕| 日韩精品久久久久久久软件91| 欧美有码在线| 精品国产一区二区三区av片| 黄色欧美在线| 久久婷婷激情| 国产亚洲亚洲| 五月激激激综合网色播| 国产欧美日韩影院| 国产专区精品| 999国产精品999久久久久久| 女同性一区二区三区人了人一 | 亚洲人成亚洲精品| 日韩欧美美女在线观看| 日韩高清成人在线| 国产精品亚洲产品| 日本一区二区免费高清| 欧美日韩一二| 日韩在线观看一区二区| 日韩精品亚洲专区在线观看| 国产精品自拍区| 日韩欧美字幕| 国产视频亚洲| 欧美亚洲一区二区三区| 国产成人精品一区二区三区在线| 日韩另类视频| 日本 国产 欧美色综合| 国产精品资源| 国产麻豆久久| 视频一区二区三区入口| 国产日韩欧美一区| 日韩欧美三级| 久久亚洲不卡| 国产毛片久久久| 日韩欧美一区二区三区在线视频| 亚洲欧洲一区二区天堂久久| 日本aⅴ免费视频一区二区三区| 麻豆精品国产91久久久久久| 久久激情一区| 四虎在线精品| 黑森林国产精品av| 免费在线观看日韩欧美| 久久精品国产久精国产| 久久精品99久久无色码中文字幕| 免费在线观看视频一区| 开心激情综合| 久久都是精品| 精品一区二区三区中文字幕| 亚洲免费成人| 久久久国产精品入口麻豆| 黄色国产精品| 免费在线播放第一区高清av| 欧美va亚洲va日韩∨a综合色| 日韩高清不卡在线| 日韩国产一区二区三区| 亚洲v天堂v手机在线| 毛片在线网站| 日本va欧美va精品| 99视频精品全部免费在线视频| 四虎国产精品免费久久| 国产传媒在线观看| 少妇精品在线| 在线日韩一区| 麻豆成人在线观看| 免费人成黄页网站在线一区二区| 国产精品不卡| 日韩高清在线不卡| 欧美~级网站不卡| 久久精品一本| 亚洲精品乱码久久久久久蜜桃麻豆| 在线精品亚洲欧美日韩国产| 日韩黄色av| 国产视频一区在线观看一区免费| 精品日韩在线| 伊人久久大香伊蕉在人线观看热v| 精品久久久久久久| 日本一区二区三区中文字幕| 尤物tv在线精品| 久久免费福利| 日欧美一区二区| 影音先锋久久| 欧美aa在线观看| 你懂的国产精品永久在线| 综合国产精品| 亚洲欧洲另类| 日韩精品久久久久久久电影99爱| 久久国产免费看| 蜜芽一区二区三区| 亚洲性图久久| 精品72久久久久中文字幕| 日韩视频一二区| 免费在线视频一区| 国产高清一区二区| 欧洲在线一区| 国产欧洲在线| 免费一级欧美在线观看视频|