欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【进程 07】单进程拷贝文件与多进程拷贝文件的优劣(适用情况)

程序员文章站 2022-05-03 20:03:45
...

单线程模式

import os
import time


def copyFile(rPath, wPath):
    fr = open(rPath, 'rb')
    fw = open(wPath, 'wb')
    content = fr.read()
    fw.write(content)
    fr.close()
    fw.close()


path = r'D:\pic'
toPath = r'./pic1'

# 读取path下所有文件
fileList = os.listdir(path)
# 使用for in

start = time.time()
for fileName in fileList:
    copyFile(os.path.join(path, fileName), os.path.join(toPath, fileName))

end = time.time()
print('总耗时:%0.2f' % (end - start))

 

代码讲解如下:

  1. 导库 os time os操作系统文件 time计算耗费时间
  2. 创建方法 用于读写文件 拷贝就是读出来写进去
  3. 设置读写路径
  4. os.listdir 方法可以读到 path 下的文件名(注意是文件名)返回的是列表
  5. 设置起始时间 start
  6. 遍历文件名列表
  7. 调用方法  调用的过程中,使用了路径拼接的方法,把 path 和 文件名 拼起来就是一个完整的路径
  8. 计算结束时间 end
  9. 求的总耗时
     

 多线程模式

import os
import time
from multiprocessing import Pool


def copyFile(rPath, wPath):
    fr = open(rPath, 'rb')
    fw = open(wPath, 'wb')
    content = fr.read()
    fw.write(content)
    fr.close()
    fw.close()


if __name__ == '__main__':
    path = r'D:\pic'
    toPath = r'./pic'
    # 读取path下的所有文件
    fileList = os.listdir(path)
    start = time.time()
    p = Pool(2)
    for fileName in fileList:
        p.apply_async(copyFile, args=(os.path.join(path, fileName),
                                      os.path.join(toPath, fileName)))
    p.close()
    p.join()
    end = time.time()
    print('总耗时%0.2f' % (end - start))
    # 创建进程比较耗费时间

代码讲解如下:

  1. 前边大同小异,多导一个 Pool
  2. 从计时开始 模拟了双核 同时执行两个任务
  3. 遍历列表,拷贝每一个文件都产生一个进程
  4. 计算总耗时

 

结论:

  1.  并不是任何情况使用多进程就好,因为创建进程本身比较耗费时间

  2. 适用多进程的情况:单个文件较大,总拷贝数量较少(例如拷贝视频)如果是拷贝图片,数量很多。
  3. 如果单个文件很小,使用多进程的话会浪费大量的时间创建进程
相关标签: python之道