多进程遍历文件夹和文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/15 18:29:06
# @Author : kevin
# @Site : 
# @File : Multi_process_File.py
# @Software: PyCharm
import csv, os
import multiprocessing
import time

# time_start = time.time()  # 程序开始时间

# 导出的Excel的命名及格式
Fil_path_csv = open(r'C:\Users\点雨洛山岚\Desktop\Stu_csv.csv', 'a', newline='', encoding='utf-8-sig')
csv_write = csv.writer(Fil_path_csv, dialect='excel')

Initial_File_path = r"C:"  # 需要遍历文件夹的路径,注意后面不要带\

# 获取初始路径的文件夹,多进程会根据该条目进行进程启用
for root, dirs, files in os.walk(Initial_File_path + "\\"):
    # print(dirs)
    break


# 文件遍历的方法
class Multi_File_path():
    def Multi_path(self, f):
        for dirs in os.walk(f):
            csv_write.writerow(dirs)  # 将遍历的文件路径写入Excel中
            # print(dirs)


if __name__ == "__main__":
    b = 0
    for l in dirs:  # 读取初始路径下的文件夹数量进行进程启动
      a = str(l)
      b += 1
      # 启动多个进程
      multiply_process = multiprocessing.Process(target=Multi_File_path.Multi_path(Multi_File_path,Initial_File_path + "\\" + a))
      multiply_process.start()
# time_end = time.time()  # 程序结束时间
# print(time_end - time_start)  # 程序运行一共用了多久

遍历40万个文件夹大约耗时两分钟。

多进程还有优化空间,例如使用递归将文件夹下面的每个文件夹再启用多进程进行遍历。需要考虑效率问题,如果某个文件夹下面只有一个文件,单独启用一个进程进行遍历效率上不划算。再例如运行程序的CPU性能较低,启动太多进程可能会导致系统卡死等问题,需要权衡。至于为什么不用多线程?。。。。。。。。。。。没研究*_*

其实是因为多线程有GUI锁,好像导致线程无法同一时间调用多核心。
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐