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

来源:互联网 发布:c 编程游戏写法 编辑:程序博客网 时间:2024/06/07 17:50

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

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

#创建200个文件i = 0while 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,Managerimport timeimport osimport shutilimport randomstart = 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 timeimport osimport shutilimport randomstart = 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倍左右。

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

阅读全文
0 0
原创粉丝点击