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

python多進程中的內(nèi)存復(fù)制(實例講解)

 更新時間:2018年01月05日 14:40:50   作者:pushiqiang  
下面小編就為大家分享一篇python多進程中的內(nèi)存復(fù)制(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

比較好奇python對于多進程中copy on write機制的實際使用情況。目前從實驗結(jié)果來看,python 使用multiprocessing來創(chuàng)建多進程時,無論數(shù)據(jù)是否不會被更改,子進程都會復(fù)制父進程的狀態(tài)(內(nèi)存空間數(shù)據(jù)等)。所以如果主進程耗的資源較多時,不小心就會造成不必要的大量的內(nèi)存復(fù)制,從而可能導(dǎo)致內(nèi)存爆滿的情況。

示例

舉個例子,假設(shè)主進程讀取了一個大文件對象的所有行,然后通過multiprocessing創(chuàng)建工作進程,并循環(huán)地將每一行數(shù)據(jù)交給工作進程來處理:

def parse_lines(args):
 #working
 ...
def main_logic():
 f = open(filename , 'r')
 lines = f.readlines()
 f.close()
 pool = multiprocessing.Pool(processes==4)
 rel = pool.map(parse_lines , itertools.izip(lines , itertools.repeat(second_args)) , int(len(lines)/4))
 pool.close()
 pool.join()

以下是top及ps結(jié)果:

(四個子進程)

(父進程及四個子進程)

由上兩張圖可以看出父進程及子進程都各自占用了1.4G左右的內(nèi)存空間。而大部分內(nèi)存空間存儲的是讀數(shù)據(jù)lines,所以這樣的內(nèi)存開銷太浪費。

優(yōu)化計劃

1: 在主進程初期未導(dǎo)入大量的py庫之前創(chuàng)建進程,或者動態(tài)加載py庫。

2:通過內(nèi)存共享來減少內(nèi)存的開銷。

3: 主進程不再讀取文件對象,交給每個工作進程去讀取文件中的相應(yīng)部分。

改進代碼:

def line_count(file_name):
 count = -1 #讓空文件的行號顯示0
 for count,line in enumerate(open(file_name)): pass
 #enumerate格式化成了元組,count就是行號,因為從0開始要+1
 return count+1
def parse_lines(args):
 f = open(args[0] , 'r')
 lines = f.readlines()[args[1]:args[2]] #read some lines
 f.close() 
 #working
def main_logic(filename,process_num):
 line_count = line_count(filename)
 avg_len = int(line_count/process_num)
 left_cnt = line_count%process_num;
 pool = multiprocessing.Pool(processes=process_num)
 for i in xrange(0,process_num):
  ext_cnt = (i>=process_num-1 and [left_cnt] or [0])[0]
  st_line = i*avg_len
  pool.apply_async(parse_lines, ((filename, st_line, st_line+avg_len+ext_cnt),)) #指定進程讀某幾行數(shù)據(jù)
 pool.close()
 pool.join()

再次用top或者ps來查看進程的內(nèi)存使用情況:

(四個子進程)

(父進程及四個子進程)

小結(jié)

對比兩次的內(nèi)存使用情況,改進代碼后父進程及子進程所占用的內(nèi)存明顯減少;所有內(nèi)存占用相當于原來的一半,這就是減少內(nèi)存復(fù)制的效果。

關(guān)于內(nèi)存使用這方面還有不少優(yōu)化方法和空間,稍后繼續(xù)研究。

以上這篇python多進程中的內(nèi)存復(fù)制(實例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python?matplotlib繪圖時指定圖像大小及放大圖像詳解

    Python?matplotlib繪圖時指定圖像大小及放大圖像詳解

    Matplotlib是一個面向?qū)ο蟮睦L圖庫,我們繪制的圖像中,每條曲線,每個邊框等等都對應(yīng)一個對象,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib繪圖時指定圖像大小及放大圖像的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python pip安裝第三方庫的攻略分享

    Python pip安裝第三方庫的攻略分享

    pip 就是 Python 標準庫(The Python Standard Library)中的一個包,只是這個包比較特殊,用它可以來管理 Python 標準庫(The Python Standard Library)中其他的包。本文為大家介紹了pip安裝第三方庫的方法,需要的可以參考一下
    2022-11-11
  • Python列表常用函數(shù)使用詳解

    Python列表常用函數(shù)使用詳解

    這篇文章主要為大家介紹了Python列表常用的一些函數(shù)的使用詳解,并通過一些簡單的案例讓大家更快的理解,感興趣的可以跟隨小編一起學習一下
    2021-12-12
  • Python常用配置文件ini、json、yaml讀寫總結(jié)

    Python常用配置文件ini、json、yaml讀寫總結(jié)

    用的配置文件格式有ini、json、yaml等,下面簡單給大家介紹下,Python如何讀寫這幾種格式的文件,對Python讀寫ini、json、yaml配置文件相關(guān)知識感興趣的朋友一起看看吧
    2021-07-07
  • python亂序字符串排序的實現(xiàn)方式

    python亂序字符串排序的實現(xiàn)方式

    這篇文章主要介紹了python亂序字符串排序的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python中關(guān)于CIFAR10數(shù)據(jù)集的使用

    python中關(guān)于CIFAR10數(shù)據(jù)集的使用

    這篇文章主要介紹了python中關(guān)于CIFAR10數(shù)據(jù)集的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用Python中tkinter庫簡單gui界面制作及打包成exe的操作方法(二)

    使用Python中tkinter庫簡單gui界面制作及打包成exe的操作方法(二)

    這篇文章主要介紹了使用Python中tkinter庫簡單gui界面制作及打包成exe的操作方法(二),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 通過實例解析python創(chuàng)建進程常用方法

    通過實例解析python創(chuàng)建進程常用方法

    這篇文章主要介紹了通過實例解析python創(chuàng)建進程常用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python使用thread模塊實現(xiàn)多線程的操作

    Python使用thread模塊實現(xiàn)多線程的操作

    線程(Threads)是操作系統(tǒng)提供的一種輕量級的執(zhí)行單元,可以在一個進程內(nèi)并發(fā)執(zhí)行多個任務(wù),每個線程都有自己的執(zhí)行上下文,包括棧、寄存器和程序計數(shù)器,本文給大家介紹了Python使用thread模塊實現(xiàn)多線程的操作,需要的朋友可以參考下
    2024-10-10
  • python文件操作之目錄遍歷實例分析

    python文件操作之目錄遍歷實例分析

    這篇文章主要介紹了python文件操作之目錄遍歷的方法,以實例形式較為詳細的分析了目錄遍歷所需要用到的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2015-05-05

最新評論

江孜县| 襄汾县| 安庆市| 余江县| 和林格尔县| 新郑市| 巍山| 章丘市| 边坝县| 张家港市| 宁乡县| 察隅县| 芜湖市| 临高县| 鄯善县| 清苑县| 肥东县| 佛山市| 西宁市| 东丰县| 蛟河市| 隆林| 客服| 静安区| 龙门县| 县级市| 广灵县| 武平县| 丽水市| 纳雍县| 靖宇县| 双峰县| 榕江县| 赣榆县| 南平市| 怀来县| 商河县| 荣昌县| 万载县| 平遥县| 金山区|