最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python進程使用內存后不釋放的解決

 更新時間:2023年11月07日 11:01:32   作者:Rnan-prince  
這篇文章主要介紹了Python進程使用內存后不釋放的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

背景

使用python進行大量的數據操作過程中RSS占用(幾個G,Python的GC會頻繁地malloc/free),發(fā)現RSS內存不釋放。

  • 排查代碼后,沒有發(fā)現內存泄露的情況,GC也是默認開啟的,甚至代碼將數據庫數據讀出來遍歷一遍后程序結束,內存一直存在不釋放。
  • 使用tracemalloc,objectgraph調試,Python對象的產生和釋放并沒有啥異常。
  • Python的對象內存管理是基于引用計數的(refcnt為0直接decref回收),python內存池也沒發(fā)現大內存駐留,操作系統brk和mmap也并沒有不釋放內存。

在調測中也發(fā)現,這個問題給人的整體感覺不是代碼哪里有問題,查閱相關資料后,發(fā)現可能是Glibc優(yōu)化問題。

python的內存機制,頻繁通過系統調用獲取和釋放內存對性能消耗很大的,python將對象銷毀后,并沒有立即將這部分內存返回給操作系統,而是加到了自己維護的空閑內存池中。

從系統層面來看,這步扥內存已經被python進程占用了,但是從python解釋器的角度來看,這部分是free的,可以用于生成新的對象。

那么我們在Python中如何手動分配釋放內存?

我們使用進程內存隔離的能力直接管理內存,父進程只負責進程池管理,子進程干完事情,直接退出,或過期重新拉起,或者超過內存閾值就干掉,就可以了(當然最好是業(yè)務處理不是很頻繁的情況下)。

多進程處理參考:multiprocessing --- 基于進程的并行 — Python 3.10.0 文檔

Process 類

在 multiprocessing 中,通過創(chuàng)建一個 Process 對象然后調用它的 start() 方法來生成進程。 

Process 和 threading.Thread API 相同。

一個簡單的多進程程序示例是:

from multiprocessing import Process
 
def f(name):
    print('hello', name)
 
if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

常見問題 

實際業(yè)務中會經常用到數據庫等長連接的操作,如數據庫等,

可能會報如下錯誤:

ERROR:base.py:Line 705:_finalize_fairy:Exception during reset or similar
 
Traceback (most recent call last):
  File "/home/tsalazar/.cache/pypoetry/virtualenvs/ufos--PZ7y9g--py3.8/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 697, in _finalize_fairy
    fairy._reset(pool)
 
  File "/home/tsalazar/.cache/pypoetry/virtualenvs/ufos--PZ7y9g--py3.8/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 893, in _reset
    pool._dialect.do_rollback(self)
 
  File "/home/tsalazar/.cache/pypoetry/virtualenvs/ufos--PZ7y9g--py3.8/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 558, in do_rollback
    dbapi_connection.rollback()
 
psycopg2.OperationalError: SSL error: decryption failed or bad record mac

解決辦法

不要將長連接對象通過參數傳遞,在函數內部鏈接,使得進程之間互不影響。 

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 零基礎寫python爬蟲之urllib2使用指南

    零基礎寫python爬蟲之urllib2使用指南

    urllib2是Python的一個獲取URLs(Uniform Resource Locators)的組件。他以urlopen函數的形式提供了一個非常簡單的接口,下面我們用實例講解他的使用方法
    2014-11-11
  • 對python mayavi三維繪圖的實現詳解

    對python mayavi三維繪圖的實現詳解

    今天小編就為大家分享一篇對python mayavi三維繪圖的實現詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • django model的update時auto_now不被更新的原因及解決方式

    django model的update時auto_now不被更新的原因及解決方式

    這篇文章主要介紹了django model的update時auto_now不被更新的原因及解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • SQLite5-使用Python來讀寫數據庫

    SQLite5-使用Python來讀寫數據庫

    這篇文章主要介紹了SQLite5-使用Python來讀寫數據庫,數據庫的實際應用,通常需要與程序結合起來,通過程序來實現對數據庫的訪問和讀寫。本篇先介紹Python語言來調用SQLite數據庫,想具體了解的小伙伴可以參考一下</P><P>
    2021-12-12
  • 使用DataFrame高效地存放和管理多維數據的方法

    使用DataFrame高效地存放和管理多維數據的方法

    在數據分析領域,處理多維數據是日常任務的核心部分,Python中的Pandas庫提供的DataFrame結構,以其靈活性和強大的功能,成為存放和處理多維數據的理想選擇,本文將深入探討如何使用DataFrame高效地存放和管理多維數據,需要的朋友可以參考下
    2026-02-02
  • Python matplotlib的使用并自定義colormap的方法

    Python matplotlib的使用并自定義colormap的方法

    今天小編就為大家分享一篇Python matplotlib的使用并自定義colormap的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 老生常談python之鴨子類和多態(tài)

    老生常談python之鴨子類和多態(tài)

    下面小編就為大家?guī)硪黄仙U刾ython之鴨子類和多態(tài)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python基于正則表達式實現計算器功能

    Python基于正則表達式實現計算器功能

    這篇文章主要介紹了Python基于正則表達式實現計算器功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Python多線程實例教程

    Python多線程實例教程

    這篇文章主要介紹了Python多線程,對比了新舊版本的Python在實現多線程的特點,并采用threading模塊的實例來講述了多線程的技巧,需要的朋友可以參考下
    2014-09-09
  • python 爬取免費簡歷模板網站的示例

    python 爬取免費簡歷模板網站的示例

    這篇文章主要介紹了python 爬取免費簡歷模板網站的示例,幫助大家更好的理解和使用python 爬蟲,感興趣的朋友可以了解下
    2020-09-09

最新評論

馆陶县| 和林格尔县| 辽宁省| 阿拉善左旗| 卓尼县| 淮北市| 务川| 宜春市| 庆阳市| 隆安县| 灌云县| 汉源县| 剑川县| 扎兰屯市| 洪泽县| 灵丘县| 台前县| 涞水县| 巴林左旗| 和硕县| 永顺县| 兰西县| 沽源县| 商洛市| 比如县| 莱西市| 庆安县| 南江县| 呼图壁县| 泗阳县| 宜都市| 霍林郭勒市| 西乡县| 绥棱县| 乐安县| 彰化市| 和平区| 桃江县| 阳山县| 油尖旺区| 辉南县|