python腳本運行越來越慢

近日需要處理大批量圖像數據,運行腳本後發現過一段時間腳本的速度下降非常厲害,到了一次一秒。於是開始查找原因。先展示我的腳本:

import os,glob
import numpy as np
import cv2
import time
import gc
import sys
import subprocess
pae = 2
path = "D:\\data\\DIV2K_clip_128\\raw\\"
sim_path = "D:\\data\\DIV2K_clip_128\\gray\\"
aim_path = "D:\\data\\DIV2K_clip_128\\dat\\" + str(pae) + "\\"
img_data = os.listdir(path)

for img in img_data: 
    if os.path.exists(os.path.join(aim_path,img[:-4]+".dat")):
        continue
    img_tmp = cv2.imread(sim_path+img[:-4]+".png",0)
    rows, cols = img_tmp.shape
    rets = os.system("calic8e.exe"+" "+str(path)+str(img)+" "+str(rows)+" "+str(cols)+" 8 "+str(pae)+" "+aim_path+str(img[:-4])+".dat")
    print(str(img)+"====>"+str(img[:-4])+".dat")
    # time.sleep(0.1)

分析代碼後發現主要運行代碼就兩個:1.opencv讀圖;2.os.system命令行運行。
首先分析是否爲opencv的問題。將os.system註釋後執行腳本,在資源管理器中發現內存比較穩定。
script with os
上圖是含有os時運行的內存監控。
在這裏插入圖片描述
上圖爲註釋os後運行時的內存監控。
經過簡單分析後得知是os.system的原因。
由於本人暫時沒找到os.system關於延時強制關閉進程的相關介紹,所以改用subprocess。繼續執行代碼發行仍然有問題。打開資源監視器後發現系統有大量死進程來不及關閉。
在這裏插入圖片描述
上圖灰色進程即是我腳本執行調用的exe。初步分析後得知是腳本運行太快,導致計算機來不及刪除大量的exe。綜上,解決方法爲添加短暫的延時,以減輕CPU負載。
在這裏插入圖片描述
本人採用延時0.1秒,可以看到,內存整體比較穩定,且cpu能夠有更多的時間刪除產生的進程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章