0

助けてくれてありがとう!参考までに、私は Windows 7-64 ビットで Python 2.5 (古いことは知っていますが、このバージョンを使用せざるを得ません) を実行しています。

それぞれ大量のデータを含むいくつかのディレクトリがあります。これらの大きなディレクトリをローカル HD からネットワーク ドライブにコピーするのにかかる時間を短縮したいと考えています。これを行うために、個々のスレッドを使用して shutil ライブラリから「移動」機能を呼び出すという素晴らしいアイデアがありました (すみません、何をしているのかわかりません)。問題が発生するのは、スレッドがディレクトリを移動しようとすると、「[errno 13] 許可が拒否されました」と表示される場合です。

私の問題の一般的なレイアウトは次のとおりです。

import shutil, threading
from Queue import Queue
def parentFunc():
    fileQ = Queue() #initialize a work queue
    lstDirsOld = ['C:\\LargeDirA','C:\\LargeDirB','C:\\LargeDirC','C:\\LargeDirD']
    lstDirsNew = ['H:\\LargeDirA','H:\\LargeDirB','H:\\LargeDirC','H:\\LargeDirD']

    for i in range(len(lstDirsOld)): #build the work queue
        fileQ.put(lstDirsOld[i],lstDirsNew[i])

    for i in range(len(lstDirsOld)): #attempt to copy files
        worker = Thread(target=childFunc,args=(fileQ,))
        worker.isDaemon = True
        worker.start()  #returns Errno 13


def childFunc(fileQ):
    while True:
        try:
            src,dst = fileQ.get()
            shutil.move(src,dst) #apparently this doesn't work in a thread
            fileQ.task_done()
        except Exception, e:
            print(str(e))

移動コマンドをparentFuncに移動してみましたが、うまくいきました。ただし、ディレクトリをコピーするにはかなりの時間がかかるため、これを解決策と呼ぶのはためらっています。

答えが目の前にあるような気がします。私はプログラマーではなくエンジニアであるため、間違いを見つけるのに苦労しています。

4

0 に答える 0