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

单线程模式

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. 如果单个文件很小,使用多进程的话会浪费大量的时间创建进程
发布了96 篇原创文章 · 获赞 103 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38114487/article/details/105269683
今日推荐