多进程遍历文件夹和文件
#!/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锁,好像导致线程无法同一时间调用多核心。