• 第六节 多进程拷贝文件


     1 import os
     2 import multiprocessing
     3 import os
     4 import time
     5 
     6 def copy_file(old_file, new_file, q):
     7         """拷贝数据"""
     8         old_f = open(old_file, 'rb')
     9         old_content = old_f.read()
    10         old_f.close()
    11         # 打开新文件开始拷贝
    12         # print(os.listdir(new_file))
    13         new_filex = open(new_file, 'wb')
    14         new_filex.write(old_content)
    15         new_filex.close()
    16         q.put(1)
    17         time.sleep(1)
    18 
    19 def main():
    20     # 1、获取文件夹内每个文件名
    21     old_path = r'G:	est'
    22     old_filename = os.listdir(old_path)
    23     # print(old_filename)
    24     # 2、创建一个新的文件夹用于存储拷贝的文件
    25     new_path = r'G:\'
    26     new_filename = 'testcopy'
    27     new_filename_path = os.path.join(new_path, new_filename)
    28     os.mkdir(new_filename_path)
    29     # 3、拷贝函数
    30     # copy_file(old_filename, old_path, new_filename)
    31     # 4、创建进程池
    32     po = multiprocessing.Pool(3)
    33     q = multiprocessing.Manager().Queue()
    34     for x in old_filename:
    35         old_file = os.path.join(old_path, x)
    36         new_file = os.path.join(new_filename_path, x)
    37         po.apply_async(copy_file, (old_file, new_file, q))
    38     po.close()
    39     # po.join()
    40     # 6、显示拷贝进度,取消po.join(),通过while循环来阻塞主进程结束
    41     while True:
    42         num = q.qsize()
    43         num_all = len(old_filename)
    44         print('
    拷贝进度为:%.02f %%' % (num*100/num_all))
    45         if num ==num_all:
    46             break
    47 
    48 if __name__ == '__main__':
    49     main()
  • 相关阅读:
    电子工程师对程序员的一番心里话(转载)
    一个程序员的一生(转载)
    程序人生中的十个感悟...
    谈计算机软件发展观念(转载)
    ASP.NET 2.0服务器控件开发精要(转载)
    一个老程序员的心里话(转载)
    hdu 1316 斐波那契数
    hdu 3117 斐波那契数列
    hdu 1239 素数水题
    hdu 2256 神奇的矩阵
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12575482.html
Copyright © 2020-2023  润新知