返回顶部

Python多线程模板,读取文件夹所有文件

Python多线程模板,读取文件夹所有文件,根据需求自行更改

from queue import Queue
import threading
import os
import openpyxl
from Levenshtein import distance  # 提高匹配速度
#import difflib  # 关键字模糊匹配度
from datetime import datetime
import time


# 定义线程数和队列
num_threads = 4
file_queue = Queue()

# 定义序号
count_lock = threading.Lock()
count = 0

# 定义要遍历的文件夹路径
# folder_path = "C:\files\"  # 测试
folder_path = input("输入文件路径,如:\033[38;2;10;10;255mC:\files\033[0m\n")

# 遍历文件夹并将文件名加入队列
for filename in os.listdir(folder_path):
    file_queue.put(os.path.join(folder_path, filename))

current_path = os.getcwd()  # 获取当前路径用来保存文件


def _file_count(filePath):
    #此处填写要使用多线程执行的代码
    pass


def process_file():
    '''定义线程函数'''
    global count
    while True:
        file_path = file_queue.get()
        try:
            # 使用锁来保护它,以确保每个线程都能正确地更新计数器
            with count_lock:
                count += 1
                file_number = count
                
            # 调用自定义函数
            _file_count(file_path)
            
        except Exception as e:
            print(f"{file_number}--log,,\033[31m文件读取错误\033[0m: {file_path}")
            print(f'原因:\033[36m{e}\033[0m')
            with count_lock:
                count -= 1  # 出错时回退计数器
            continue
        finally:
            file_queue.task_done()


def num_RorN(value, n):
    '''数字取n位小数'''
    if isinstance(value, (int, float)):
        return round(value, n)


# 创建线程并运行
start = time.time() # 开始运行时间
for i in range(num_threads):
    t = threading.Thread(target=process_file)
    t.daemon = True
    t.start()
    
# 等待队列中的所有任务完成
file_queue.join()

end = time.time()# 结束运行的时间
运行时间 = end-start
input(f'已完成,耗时:\033[32m{int(运行时间/60)}分钟({num_RorN(运行时间,2)}秒)\033[0m,任意键退出')


暂无评论