Python多进程练习(通过多进程、进程间通信等实现60个G的电影拷贝)

此篇为学习Python多进程这个知识点是的练习Demo,有兴趣的可以看一下。这 里面涉及到的知识点有:进程池(Pool)、进程间通信(Manager().Queue() > 、文件读写等。

Github : https://github.com/Pgrammerybj
个人博客(调试中):www.ppowan.com

  # coding:utf-8

import os
from multiprocessing import Pool, Manager


# 定义一个copy文件的方法
def copy_file(file, old_folder, new_folder, queue):
    # 读取文件
    fr = open(old_folder + "/" + file, "rb")
    fw = open(new_folder + "/" + file, "wb")

    file_size = (os.path.getsize(old_folder + "/" + file)) / 1024 // 1024

    print("大小:%d" % file_size + "M|||" + (old_folder + file))

    # 文件内容
    while True:
        content = fr.read(1024 * 1024)
        fw.write(content)

        if not content:
            break

    fr.close()
    fw.close()
    
    queue.put(file_size)


# 定义一个主方法来操作进程等
def main():
    current_path = "/Users/jackyang/Movies/"
    # 输入需要拷贝的文件夹
    old_folder_name = input("请输入您要拷贝的文件夹:")
    old_folder_name = current_path + old_folder_name

    # 目标位置的文件夹
    new_folder_name = old_folder_name + "-备份"
    # 创建文件夹

    if os.path.exists(new_folder_name):
        os.removedirs(new_folder_name)
    else:
        os.mkdir(new_folder_name)

    # 获取copy目录下所有的文件名
    all_file = os.listdir(old_folder_name)

    # 创建进程池
    pool = Pool(5)
    # 创建队列管理用来进程间通信
    queue = Manager().Queue()

    for file in all_file:
        pool.apply_async(copy_file, args=(file, old_folder_name, new_folder_name, queue))

    num = 0
    total = len(all_file)

    # 计算出所有文件的总大小
    sum_size = 0
    for path in all_file:
        sum_size += (os.path.getsize(old_folder_name + "/" + path)) / 1024 // 1024

    print("文件总大小:%dM" % sum_size)

    current_progress = 0
    while num < total:
        num += 1
        current_progress += queue.get()
        copyProgress = current_progress / sum_size
        print("当前的进度是:%.f%%" % (copyProgress * 100))


if __name__ == '__main__':
    main()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,563评论 6 427
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,512评论 2 45
  • 不想接受父母指定的人生,自己又不知道该往哪儿走。面对别人的意见,总有无数个理由去反驳,觉得别人不懂自己,就这样一天...
    大健涛阅读 136评论 0 1
  • 1,感恩坦坦学员们的互相影响,成就了我能每天早上坚持读(大学)。 2,感恩自己现在一点点的进步,不会受儿子情绪的影...
    丽人d阅读 123评论 0 0
  • 心中有信念, ...
    张维群阅读 282评论 0 0