文件多进程复制
# -*- coding : utf-8 -*-
# @Data : 2020-04-08
# @Author : Ming Xu
# @Email : 920972751@qq.com
# @File :
# Desctription: 文件拷贝多进程
import os
import multiprocessing
def copy_work(source_dir, dest_dir, file_name):
"""
根据参数拷贝文件
:param source_dir:
:param dest_dir:
:param file_name:
:return:
"""
# 1. 拼接源文件和目标文件的具体路径
source_path = source_dir + os.sep + file_name
dest_path = dest_dir + os.sep + file_name
#print("source path", source_path)
#print("dest path", dest_path)
print(multiprocessing.current_process())
# 2. 打开源文件,创建目标文件
with open(source_path, "rb") as source_file:
# 创建目标文件
with open(dest_path, "wb") as dest_file:
while True:
# 读源文件,保存到目标文件
file_data = source_file.read(1024)
# 判断文件是否读取完成
if file_data:
dest_file.write(file_data)
else:
break
# 3. 读取源文件的内容, 写入到目标文件中
def main():
# 1. 定义变量,保存源文件夹, 目标文件所在的路径
source_dir = "./test"
dest_dir = "./result"
# 2. 在目标路径下创建文件夹
# os.mkdir() 在指定路径下创建文件夹
try:
os.mkdir(dest_dir)
except Exception as e:
print("文件夹已经存在!")
# 3. 获取源文件夹中所有的文件 (列表)
file_list = os.listdir(source_dir)
# 创建进程池
pool = multiprocessing.Pool(3)
# 异步方法实现
for file_name in file_list:
#print(file_name)
#copy_work(source_dir, dest_dir, file_name)
pool.apply_async(copy_work, (source_dir, dest_dir, file_name))
pool.close() # 不能接收新的任务
pool.join() #
# 4. 遍历列表, 得到所有的文件名
# 5. 定义函数, 进行文件拷贝
if __name__ == "__main__":
main()