Python多线程

不知道啥时候开始,****的代码段变成全黑了,看着有点不爽(ε=(´ο`*)))唉)

以下代码功能:将一个文件夹内的图片,用5个线程同时进行处理(我这里只写了存储图像功能)

#coding=utf-8
from time import sleep, ctime
import threading
import os
import cv2
import re   #查找字符串   re.finditer(word, path)]
import numpy as np

iDisPlay=1      #显示间隔
ithreadNum=5    # 线程数量
#遍历文件夹
list = []
def TraverFolders(rootDir):
    for lists in os.listdir(rootDir):
        path = os.path.join(rootDir, lists)
        list.append(path)
        if os.path.isdir(path):
            TraverFolders(path)
    return list


#可以读取带中文路径的图
def cv_imread(file_path,type=0):
    cv_img=cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
    if(type==0):
        if(len(cv_img.shape)==3):
            cv_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY)
    return cv_img

#存储图像
def saveImage(list,savePath,threadID):
    count = 0  # 文件计数
    countImg = 0  # 图片计数
    for filename in list[threadID::ithreadNum]:
        count += 1
        # -----确定子文件夹名称------------------
        word = r'\\'
        a = [m.start() for m in re.finditer(word, filename)]
        if (len(a) == 5):  # 字文件夹
            strtemp = filename[a[-1] + 1:]  # 文件夹名称-字符名称
            # print(filename)
        # -----确定子文件夹名称------------------

        # -----子文件夹图片特征提取--------------
        if (len(a) == 6):  # 子文件夹下图片
            if ('.jpg' in filename):
                countImg += 1
                if (countImg % iDisPlay == 0):
                    print("线程%d, 共%d个文件,正在处理第%d张图片..." % (threadID, len(list), countImg))
                image = cv_imread(filename, 0)
                cv2.imencode('.jpg', image)[1].tofile(savePath + r'\\' + str(threadID)+ '_'+str(countImg)+ '.jpg')
            else:
                continue


# -------------------------------------------------------------------------------------------------------
path = r"D:\sxl\处理图片\汉字分类\11"  # 文件夹路径
print("遍历图像中,可能需要花一些时间...")
list = TraverFolders(path)

savePath=r"D:\python多线程"
threads = []  #线程列表
#创建线程
print("创建线程...")

for i in range(ithreadNum):
    t = threading.Thread(target=saveImage, args=(list, savePath, i))
    threads.append(t)

#启动线程
print("启动线程...")
for i in range(ithreadNum):
    threads[i].start()


# list =['a','b','c','d','e','f','g']
# for a in list[2::2]:
#     print(a)

读取文件夹中是25张不同的图片,执行后被5个线程分别进行了处理。
处理效果如下:
图片名称0_1.jpg中,0代表线程号,1代表该线程的存图序号。
Python多线程

欢迎扫码关注我的微信公众号“人工智能与图像处理”,本公众号专注人工智能与图像处理技术,并定期分享最前沿的专业消息。

PS:****博客适合网页看,公众号适合手机看。

Python多线程