用Python的multiprocessing模块完成(非多级)文件夹的复制

用Python的multiprocessing模块完成(非多级)文件夹的复制

文件夹复制分为两部分:
第一部分是需要先创建一个同名的文件夹副本,来存储复制的所有文件,第二部分是用进程池来完成多任务同时对所有文件的复制操作。
在完成这两部分工作的基础上,可以自己加上一些其他的小功能,比如显示一个复制的进度,或者写成多级目录的下载也是可以的,我本人只是加了一个可以在命令行显示当前复制进度的小功能,是使用Queue实现的,代码如下:

import multiprocessing
import os


def copy_file(file_name, dir_name, copy_dir_name, q):
    f_read = open(dir_name + "/" + file_name, "rb")
    f_write = open(copy_dir_name + "/" + file_name, "wb")

    f_write.write(f_read.read())
    q.put(file_name)

    f_read.close()
    f_write.close()


def main():
    dir_name = input("请输入需要复制的文件夹名:")
    copy_dir_name = dir_name + "[副本]"
    try:
        os.mkdir(copy_dir_name)
    except:
        pass

    file_list = os.listdir(dir_name)

    q = multiprocessing.Manager().Queue(5)
    po = multiprocessing.Pool(5)

    for file_name in file_list:
        po.apply_async(copy_file, args=(file_name, dir_name, copy_dir_name, q))

    po.close()

    len_list = len(file_list)
    count = 0
    while True:
        q.get()
        count += 1
        print("\r下载中:%.2f%%" % (count * 100 / len_list), end="")
        if count >= len_list:
            break


if __name__ == "__main__":
    main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值