综合内容:基于进程池实现的拷贝内容;
进程池间的通讯通过queue
实现流程:
运用多线程的部分只是在复制文件中进行的
流程:
输入文件夹名称,复制文件夹副本,
读取文件夹内的文件名;
创建进程池
创建进程通讯队列
通过进程池执行任务
通过通讯队列获取拷贝文件个数
计算和打印拷贝进度
执行拷贝任务的函数:
打开读取文件夹内的文件名,
读取文件的文件内容,
将内容写到新文件夹内的文件中
代码:
import multiprocessing
import os
def copy_file(queue,file_name,old_name,new_name):
with open(old_name+'/'+file_name,'rb') as o_f:
content = o_f.read()
with open(new_name+'/'+file_name,'wb') as n_f:
n_f.write(content)
queue.put(file_name)
def main():
#输入文件名
old_name = input('请输入文件夹名:')
new_name = old_name+'副本'
pool = multiprocessing.Pool()
queue = multiprocessing.Manager().Queue()
file_names = os.listdir(old_name)
#print(file_names)
file_num = len(file_names)
if os.path.exists(new_name):
pass
else:
os.mkdir(new_name)
for file_name in file_names:
pool.apply_async(copy_file,args=(queue,file_name,old_name,new_name))
pool.close()
complate_num = 0
while True:
if queue.get():
complate_num += 1
print('完成复制%.2f%%'%(complate_num*100/file_num))
if complate_num >= file_num:
break
pool.join()
if __name__ == '__main__':
main()