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

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

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

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
久久精品凹凸全集| 老司机精品视频在线播放| 日韩精品亚洲专区| 婷婷激情一区| 亚洲性图久久| 视频一区免费在线观看| 亚洲一区不卡| 国产免费久久| 日韩精品免费视频人成| 日韩二区在线观看| 亚洲精品免费观看| 精品一区二区三区视频在线播放| 日韩欧美激情电影| 欧美亚洲专区| 91看片一区| 蜜桃视频在线观看一区| 精品中国亚洲| 精品在线播放| 欧美日韩91| 久久精品高清| 国产精品第十页| 久久性天堂网| 久久精品主播| 视频一区二区三区在线| 久久国内精品视频| 92国产精品| 日韩精品一区二区三区中文| 日本蜜桃在线观看视频| 日本午夜精品视频在线观看| 狠狠久久伊人中文字幕| 久久福利毛片| 首页国产精品| 日本在线视频一区二区| 99久久精品费精品国产| 国内自拍视频一区二区三区| 日本精品一区二区三区在线观看视频 | 女同性一区二区三区人了人一 | 久久精品国产亚洲夜色av网站 | 欧美国产亚洲精品| 亚洲精品自拍| 亚洲一区免费| 国产精品av久久久久久麻豆网| 精品国产中文字幕第一页| 色狠狠一区二区三区| 国产亚洲网站| 美女91精品| 99视频精品| 久久婷婷丁香| 国产精品永久| 国产精品密蕾丝视频下载| 国产日产一区| 国产日韩一区二区三区在线播放| 欧美精选一区二区三区| 日韩国产综合| 日韩精品一区二区三区免费观影 | 日韩av午夜在线观看| 久久最新视频| 欧美美女一区| 午夜精品网站| 免费久久99精品国产| 亚洲精品美女| 国产精品日韩精品中文字幕| 国产精品三p一区二区| 欧美成人一二区| 日韩毛片视频| 亚洲激情婷婷| 久久久久国产精品一区二区| 蜜臀91精品国产高清在线观看| 美女亚洲一区| 丝袜美腿高跟呻吟高潮一区| 久久国产婷婷国产香蕉| 91偷拍一区二区三区精品| 国产欧美一区二区三区米奇| 日韩福利视频网| 日韩成人综合| 日韩中文字幕区一区有砖一区 | 欧美黑人巨大videos精品| 久久精品国内一区二区三区| 国产传媒在线观看| 日韩高清电影一区| 欧美一区久久| 天堂久久一区| 久久亚洲一区| 999国产精品| 欧美日韩a区| 亚洲一级在线| 久久久精品国产**网站| 最新国产拍偷乱拍精品| 麻豆久久久久久| 男女男精品网站| 久久中文亚洲字幕| 日韩av不卡一区二区| 黄色成人91| 成人在线丰满少妇av| 欧美日本二区| 今天的高清视频免费播放成人| 在线视频免费在线观看一区二区| 日韩一区精品字幕| 99视频+国产日韩欧美| 久久婷婷激情| 日韩大片在线| 日韩久久精品| 高清不卡亚洲| 日韩一二三区在线观看| 国产一区二区三区四区| 在线精品视频在线观看高清| 欧美a一区二区| 亚洲精品伊人| 香蕉久久国产| 好看的亚洲午夜视频在线| 国产精品一站二站| 自拍自偷一区二区三区| 99久精品视频在线观看视频| 国产精品亚洲二区| 视频精品一区| 免费看日韩精品| 影音先锋国产精品| 黑人精品一区| 精品福利久久久| 里番精品3d一二三区| 国产日韩欧美中文在线| 四虎在线精品| 久久av在线| 亚洲三级网站| 亚洲精品进入| 亚洲精品1区2区| 亚洲一区区二区| 国产农村妇女精品一二区| 不卡一区2区| 丝瓜av网站精品一区二区| 亚洲欧美久久久| 美女精品一区| 日韩欧美四区| 国产精品视频一区二区三区四蜜臂 | 日韩激情综合| 日韩在线a电影| 一区二区亚洲视频| 深夜日韩欧美| 欧美精品影院| 精品入口麻豆88视频| 久久久久久久欧美精品| 婷婷综合激情| 久久午夜精品| 免费不卡在线视频| 丝袜亚洲精品中文字幕一区| 一二三区精品| 久久福利精品| 欧美日韩亚洲一区三区| 日本不卡一区二区| 国产精品欧美在线观看| 中文在线а√天堂| 首页亚洲欧美制服丝腿| 国产欧美69| 欧美日韩精品免费观看视完整| 另类av一区二区| 国产黄色一区| 国产精品成人a在线观看| 欧美午夜不卡影院在线观看完整版免费| 日本一区二区三区视频在线看| 精品国产乱码久久久久久1区2匹| 久久一级电影| 国产精品tv| 蜜桃av一区二区三区电影| 久久久久久久欧美精品| 日韩精品福利一区二区三区| 日韩精品一区二区三区免费观影| 亚洲精品黄色| 99精品在线| 久久精品资源| 99日韩精品| 日韩精品永久网址| 青青草国产精品亚洲专区无| 日韩国产一区二区三区| 欧美日韩亚洲国产精品| 黄色国产精品| 91精品在线观看国产| 国产精品久久| 欧美天堂在线| 日韩精品一级中文字幕精品视频免费观看| 另类综合日韩欧美亚洲| 热久久久久久| 亚洲色图国产| 蜜臀精品一区二区三区在线观看| 激情婷婷久久| 日韩国产欧美一区二区| 日本激情一区| 久久精品国产99国产| 丝袜国产日韩另类美女| 日韩一级网站| 久久久五月天| 99国产精品一区二区| 久久婷婷一区| 99精品电影| 黄色av日韩| 蜜臀久久99精品久久久久宅男| 99视频精品| 丝袜国产日韩另类美女| 中文字幕av一区二区三区人| 美女精品在线| 日本中文字幕视频一区|