基于进程池实现文件拷贝

综合内容:基于进程池实现的拷贝内容;
进程池间的通讯通过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()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值