マルチスレッドとマルチプロセスによるファイルのコピー(簡易版)

3076 ワード

使用するモジュール
os         
mulitprocessing       
threading       

思考:どうやって手に入れますか?
         ,                     。               ,         ,          ,        。
#                  ,          。      。

# rpath                
# wpath        (    )   
def copyFile(rPath,wPath):

    #                  
    fr = open(rPath,"rb")
    #                  
    fw = open(wPath,"wb")

    #        fr  ,      context
    context = fr.read()
    #  context      fw   
    fw.write(context)
    
    #     
    fr.close()
    fw.close()

# r       
path = r"C:\Users\Champion\Desktop\    "  #   
topath = r"C:\Users\Champion\Desktop\copyText"
# path = r"C:\Users\Champion\Desktop\    \copyDemo.txt"  #   
# topath = r"C:\Users\Champion\Desktop\copyText\copyDemo.txt"


パスの下にあるすべてのファイルを読み込む
fileList = os.listdir(path)

for各ファイルをループ処理してコピーする
for fileName in fileList:
    copyFile(os.path.join(path,fileName),os.path.join(topath,fileName))

ok!ここまで、元の方法でファイルのコピーを実現すれば完了します.実は、この方法は単一プロセスでコピーされ、システムがデフォルトで実行しています.
次に、マルチプロセス方式を使用してファイルのコピーを行います.ハのためにマルチプロセスを使用しますか?マルチプロセスは、マルチタスクを意味し、実行効率を向上させます.例えば、1 GBファイルのコピーを行い、単一プロセスのモードでコピーするには約30 sかかります.しかし、ファイルのコピーを複数のプロセス、例えば4つのプロセスで同時に行うには、約10数秒かかります.
2つの方法でファイルをコピーする効率が悪く、マルチスレッドでも時間がかかることに気づいたら、ファイルが大きくないという問題があります.手動コミカル0.0.0.0...0...00
import os,time
from multiprocessing import Process,Pool
import threading

#       

# arguments         
def copyFile(rPath,wPath):
    fr = open(rPath,"rb")
    fw = open(wPath,"wb")

    context = fr.read()
    fw.write(context)

    fr.close()
    fw.close()

path = r"C:\Users\Champion\Desktop\    "
topath = r"C:\Users\Champion\Desktop\copyText"
# path = r"C:\Users\Champion\Desktop\    \copyDemo.txt"
# topath = r"C:\Users\Champion\Desktop\copyText\copyDemo.txt"

'''
#           
#  path        
fileList = os.listdir(path)
# for             
for fileName in fileList:
    copyFile(os.path.join(path,fileName),os.path.join(topath,fileName))
'''


#                
if __name__ == "__main__":
    fileList = os.listdir(path)

    #                   
    pp = Pool(2)
    for fileName in fileList:
        #     
        pp.apply_async(copyFile,args=(os.path.join(path,fileName),os.path.join(topath,fileName)))
    pp.close()
    pp.join()
    print("     ")



'''
#        
if __name__ == "__main__":
    print("   %s  "%(threading.current_thread()))
    start = time.time()
    p = threading.Thread(target=copyFile,name="copy",args=(path,topath))
    print("   %s  "%(threading.Thread.name))
    p.start()
    p.join()
    end = time.time()

    # time.sleep(2)
    print("   %s    ,   %.2fs"%(threading.Thread.name,(end-start)))  # 3.41s
    # p.join()
    print("   %s  "%(threading.current_thread()))
'''