91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在python多進程中復制內存

發布時間:2021-03-02 15:25:48 來源:億速云 閱讀:214 作者:戴恩恩 欄目:開發技術

這篇文章主要介紹了如何在python多進程中復制內存,億速云小編覺得不錯,現在分享給大家,也給大家做個參考,一起跟隨億速云小編來看看吧!

python是什么意思

Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。

舉個例子,假設主進程讀取了一個大文件對象的所有行,然后通過multiprocessing創建工作進程,并循環地將每一行數據交給工作進程來處理:

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結果:

如何在python多進程中復制內存

(四個子進程)

如何在python多進程中復制內存

(父進程及四個子進程)

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

優化計劃

1: 在主進程初期未導入大量的py庫之前創建進程,或者動態加載py庫。

2:通過內存共享來減少內存的開銷。

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

改進代碼:

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),)) #指定進程讀某幾行數據
 pool.close()
 pool.join()

再次用top或者ps來查看進程的內存使用情況:

如何在python多進程中復制內存

(四個子進程)

如何在python多進程中復制內存

以上就是億速云小編為大家收集整理的如何在python多進程中復制內存,如何覺得億速云網站的內容還不錯,歡迎將億速云網站推薦給身邊好友。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新源县| 儋州市| 偃师市| 股票| 长丰县| 徐州市| 西藏| 甘谷县| 乐昌市| 班戈县| 吴堡县| 苍梧县| 南城县| 龙川县| 多伦县| 宜兰县| 双流县| 连山| 万全县| 凤凰县| 瓮安县| 道真| 巍山| 维西| 玛沁县| 阿克苏市| 乡宁县| 五河县| 洮南市| 班戈县| 道孚县| 阳西县| 开原市| 南皮县| 潮安县| 乐陵市| 潜山县| 措勤县| 淳安县| 尖扎县| 乌兰浩特市|