import os
import multiprocessing
import time
def copy_file(src_path, dest_path, file_name, queue):
"""是子进程调用 拷贝文件的函数 参数1源目录 参数2目标目录 参数3被拷贝的文件名
"""
# 打开源目录/文件名 --读取rb---写入wb-> 目的目录
src_file = open(src_path+"/" + file_name, "rb")
dest_file = open(dest_path + "/" + file_name, "wb")
# 一边从源文件中读取 ---> 写入
while True:
file_data = src_file.read(4096)
if not file_data:
break
dest_file.write(file_data)
src_file.close()
dest_file.close()
# 拷贝完成后 将文件名放入队列
queue.put(file_name)
if __name__ == '__main__':
# 输入需要被拷贝的目录名 a-> a-备份
src_path = input("输入需要被拷贝的目录名")
# 创建一个备份目录
dest_path = src_path + "-备份"
os.mkdir(dest_path)
# 获取需要被拷贝的目录下的所有文件 文件列表
file_list = os.listdir(src_path)
# 获取总的文件数量
count = len(file_list)
# 创建一个队列-用以 主进程和子进程之间通信<子进程拷贝完成文件后通过队列通知主进程>
queue = multiprocessing.Queue(32)
# 遍历文件列表 获取到每个文件名 ---子进程 完成该文件的拷贝
for file in file_list:
# print(file)
pro = multiprocessing.Process(target=copy_file, args=(src_path, dest_path, file, queue))
pro.start()
count_done = 0
# 主进程不断获取子进程传过来的 数据<文件名>
while True:
file_name = queue.get()
count_done += 1
print("\r 完成进度 %% %.2f" % (100 * count_done/count), end="")
time.sleep(0.5)
if count == count_done:
break
import multiprocessing
import time
def copy_file(src_path, dest_path, file_name, queue):
"""是子进程调用 拷贝文件的函数 参数1源目录 参数2目标目录 参数3被拷贝的文件名
"""
# 打开源目录/文件名 --读取rb---写入wb-> 目的目录
src_file = open(src_path+"/" + file_name, "rb")
dest_file = open(dest_path + "/" + file_name, "wb")
# 一边从源文件中读取 ---> 写入
while True:
file_data = src_file.read(4096)
if not file_data:
break
dest_file.write(file_data)
src_file.close()
dest_file.close()
# 拷贝完成后 将文件名放入队列
queue.put(file_name)
if __name__ == '__main__':
# 输入需要被拷贝的目录名 a-> a-备份
src_path = input("输入需要被拷贝的目录名")
# 创建一个备份目录
dest_path = src_path + "-备份"
os.mkdir(dest_path)
# 获取需要被拷贝的目录下的所有文件 文件列表
file_list = os.listdir(src_path)
# 获取总的文件数量
count = len(file_list)
# 创建一个队列-用以 主进程和子进程之间通信<子进程拷贝完成文件后通过队列通知主进程>
queue = multiprocessing.Queue(32)
# 遍历文件列表 获取到每个文件名 ---子进程 完成该文件的拷贝
for file in file_list:
# print(file)
pro = multiprocessing.Process(target=copy_file, args=(src_path, dest_path, file, queue))
pro.start()
count_done = 0
# 主进程不断获取子进程传过来的 数据<文件名>
while True:
file_name = queue.get()
count_done += 1
print("\r 完成进度 %% %.2f" % (100 * count_done/count), end="")
time.sleep(0.5)
if count == count_done:
break