マルチスレッドとマルチプロセスによるファイルのコピー(簡易版)
3076 ワード
使用するモジュール
思考:どうやって手に入れますか?
パスの下にあるすべてのファイルを読み込む
for各ファイルをループ処理してコピーする
ok!ここまで、元の方法でファイルのコピーを実現すれば完了します.実は、この方法は単一プロセスでコピーされ、システムがデフォルトで実行しています.
次に、マルチプロセス方式を使用してファイルのコピーを行います.ハのためにマルチプロセスを使用しますか?マルチプロセスは、マルチタスクを意味し、実行効率を向上させます.例えば、1 GBファイルのコピーを行い、単一プロセスのモードでコピーするには約30 sかかります.しかし、ファイルのコピーを複数のプロセス、例えば4つのプロセスで同時に行うには、約10数秒かかります.
2つの方法でファイルをコピーする効率が悪く、マルチスレッドでも時間がかかることに気づいたら、ファイルが大きくないという問題があります.手動コミカル0.0.0.0...0...00
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()))
'''