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注释后执行脚本,在资源管理器中发现内存比较稳定。
python脚本运行越来越慢_第1张图片
上图是含有os时运行的内存监控。
python脚本运行越来越慢_第2张图片
上图为注释os后运行时的内存监控。
经过简单分析后得知是os.system的原因。
由于本人暂时没找到os.system关于延时强制关闭进程的相关介绍,所以改用subprocess。继续执行代码发行仍然有问题。打开资源监视器后发现系统有大量死进程来不及关闭。
python脚本运行越来越慢_第3张图片
上图灰色进程即是我脚本执行调用的exe。初步分析后得知是脚本运行太快,导致计算机来不及删除大量的exe。综上,解决方法为添加短暂的延时,以减轻CPU负载。
python脚本运行越来越慢_第4张图片
本人采用延时0.1秒,可以看到,内存整体比较稳定,且cpu能够有更多的时间删除产生的进程。

你可能感兴趣的:(零碎)