zoukankan      html  css  js  c++  java
  • 18 11 19 网络通信 ----多任务----进程 案例 多任务拷贝器

    import os
    import multiprocessing


    def copy_file(q, file_name, old_folder_name, new_folder_name):
    """完成文件的复制"""
    # print("======>模拟copy文件:从%s--->到%s 文件名是:%s" % (old_folder_name, new_folder_name, file_name))
    old_f = open(old_folder_name + "/" + file_name, "rb")
    content = old_f.read()
    old_f.close()

    new_f = open(new_folder_name + "/" + file_name, "wb")
    new_f.write(content)
    new_f.close()

    # 如果拷贝完了文件,那么就向队列中写入一个消息,表示已经完成
    q.put(file_name)


    def main():
    # 1. 获取用户要copy的文件夹的名字
    old_folder_name = input("请输入要copy的文件夹的名字:")

    # 2. 创建一个新的文件夹
    try:
    new_folder_name = old_folder_name + "[复件]"
    os.mkdir(new_folder_name)
    except:
    pass

    # 3. 获取文件夹的所有的待copy的文件名字 listdir()
    file_names = os.listdir(old_folder_name)
    # print(file_names)

    # 4. 创建进程池
    po = multiprocessing.Pool(5)

    # 5. 创建一个队列
    q = multiprocessing.Manager().Queue()

    # 6. 向进程池中添加 copy文件的任务
    for file_name in file_names:
    po.apply_async(copy_file, args=(q, file_name, old_folder_name, new_folder_name))

    po.close()
    # po.join()
    all_file_num = len(file_names) # 测一下所有的文件个数
    copy_ok_num = 0
    while True:
    file_name = q.get()
    # print("已经完成copy:%s" % file_name)
    copy_ok_num+=1
    print(" 拷贝的进度为:%.2f %%" % (copy_ok_num*100/all_file_num), end="")
    if copy_ok_num >= all_file_num:
    break


    print()

    if __name__ == "__main__":
    main()

    一个多进程的文件拷贝器    增加了百分号进度条的显示   大概  过程是吧 分配的5进程得到的结果全部放进一个queue 中 通过查看所有文件数和查看当前文件数 来进行百分号的运算

  • 相关阅读:
    CopyOnWriteArrayList设计思路与源码分析
    点击页面按钮以excel保存到本地
    上传图片
    关于重复点击的
    去首尾空格还有换行问题//把数字换位大写字母//向后台传输数据
    判断输入的时间与当前的时间(判断时间是今天还是以前的)
    前端的一些小技巧
    git 操作大全
    移动web开发常见问题解决方案
    响应式布局
  • 原文地址:https://www.cnblogs.com/fromlantianwei/p/9986653.html
Copyright © 2011-2022 走看看