2017-10-26 4 views
1

.NET版にはsimilar questionがありますが、私は特にPython os.walk関数について尋ねています。私は最新のPython 3を使用しています。os.walkによってスキャンされているファイルが実行中に変更された場合はどうなりますか?

ファイルがたくさんあるディレクトリがあるとします。私は各ファイルにしばらく時間がかかりますが、rootディレクトリが別のプロセスによって中間ループに変更されるのに十分な時間がかかります。ここでは明瞭のために、たとえば次のようになります。

for root, dirs, files in os.walk(rootDirectory): 
    for file in files: 
     doAReallyLongBlockingCall(file) 

os.walk、このような変更を検出しませんか?ファイルを追加すると、それはos.walkで見つかるのでしょうか?

+0

それを試して、マルチプロセッシングやスレッドを使用して、ファイルを作成してみてください1つのプロセス/スレッドを持つツリー内にあり、他のプロセス/スレッドと一緒にツリーを歩きます。何が起こった?いくつかのランドウ 'time.sleep()'を投げてください。それらの2つが完了した後にツリーを歩いて、結果を比較してください。 – wwii

答えて

1

これは、データがあなたのループで

もしそうなら、あなたの手の下で変更されませんos.walkについては本当にありませんが、あなたがディレクトリを開いたら、OSはLinux上で を行うことは(そのためのシステムコールがあります)ファイルを開いて処理するのに10分かかり、未処理のファイルの1つが削除されても、名前はもちろん、opendirが表示されなくても作成されたファイルが表示されます

ケースを処理するには例外が必要ですあなたがそれに到達する前にファイルを失うとき

関連する問題