zoukankan      html  css  js  c++  java
  • 第六节 多进程拷贝文件

     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()
  • 相关阅读:
    P20 HTTP 方法的安全性与幂等性
    P19 查询参数
    P18 写代码:过滤和搜索
    P17 过滤和搜索
    P16 HTTP HEAD
    golang的json操作[转]
    Android中的Service 与 Thread 的区别[转]
    iOS的block内存管理
    Go并发编程基础(译)
    golang闭包里的坑
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12575482.html
Copyright © 2011-2022 走看看