python中使用多进程和单进程分别拷贝大量文件效率对比

此贴用于研究多进程和单进程拷贝大量文件的效率问题

首先建立test文件夹,然后使用下列代码批量创建200个py文件

#创建200个文件
i = 0
while i < 200:
    o = open("test/"+str(i)+".py","w")
    content = str(i);
    o.write(content)
    o.close()
    i += 1

一:使用进程池Pool拷贝文件
下列代码中将创建5个进程用于拷贝文件

from multiprocessing import Pool,Manager
import time
import os
import shutil
import random

start = time.time()
#从源文件夹复制到目标文件夹
def copyFile(file_name,old_folder_name,new_folder_name,q):
    time.sleep(random.random())
    shutil.copyfile(old_folder_name+"/"+file_name,new_folder_name+"/"+file_name,)
    q.put(file_name)

def main():
    #创建Pool
    pool = Pool(5)
    #创建小心队列
    q = Manager().Queue()

    #获取待拷贝的文件夹名
    old_folder_name = input("请输入你要拷贝的文件夹名称:")

    #组装目标文件夹名称
    new_folder_name = old_folder_name + "-复制"
    os.mkdir(new_folder_name)

    file_name_list = os.listdir(old_folder_name)

    for value in file_name_list:
        pool.apply_async(copyFile,args=(value,old_folder_name,new_folder_name,q))

    count = 0
    allLength = len(file_name_list)
    while count < allLength:
        message = q.get()
        count += 1
        print("\r正在拷贝%s,拷贝的进度是:%d%%"%(message,(count/allLength)*100),end="")

    print("\n拷贝完毕")

if __name__ == "__main__":
    main()
    end = time.time()
    print("多进程花费的时间:%#.2fs"%(end-start))

执行代码后,运行结果为:
请输入你要拷贝的文件夹名称:test
正在拷贝132.py,拷贝的进度是:100%
拷贝完毕
多进程花费的时间:25.05s

此时可以得知多进程拷贝200个文件总花费时间为25.05s.


二:使用单进程批量拷贝文件

import time
import os
import shutil
import random

start = time.time()
#从源文件夹复制到目标文件夹
def copyFile(file_name,old_folder_name,new_folder_name):
    time.sleep(random.random())
    shutil.copyfile(old_folder_name+"/"+file_name,new_folder_name+"/"+file_name,)


def main():

    #获取待拷贝的文件夹名
    old_folder_name = input("请输入你要拷贝的文件夹名称:")

    #组装目标文件夹名称
    new_folder_name = old_folder_name + "-复制"
    os.mkdir(new_folder_name)


    file_name_list = os.listdir(old_folder_name)

    count = 0
    allLength = len(file_name_list)

    for value in file_name_list:
        copyFile(value,old_folder_name,new_folder_name)
        count += 1
        print("\r正在拷贝%s,拷贝的进度是:%d%%" % (value, (count / allLength) * 100), end="")

    print("\n拷贝完毕")

if __name__ == "__main__":
    main()
    end = time.time()
    print("单进程花费的时间:%#.2fs"%(end-start))

上段代码的执行结果:
请输入你要拷贝的文件夹名称:test
正在拷贝98.py,拷贝的进度是:100%
拷贝完毕
单进程花费的时间:99.66s

由两段代码的执行结果来看,对于大批量文件,多进程效率是单进程效率4倍左右。

注意:倍数不是绝对的,由电脑硬件,文件数以及其他因素共同决定的

你可能感兴趣的:(python中使用多进程和单进程分别拷贝大量文件效率对比)