大きなファイル/フォルダの束をある場所からデスクトップ上の別の場所にコピーするPythonコードを書いています(ネットワークなし、すべてがローカルです)。私はそのためにshutilモジュールを使用しています。並行ファイルコピー操作のためのPythonマルチプロセス/マルチスレッドの使用
しかし、このコピープロセスのスピードを上げるために時間がかかるという問題があります。私はスレッドとマルチプロセッシングモジュールを使ってみました。しかし、私の驚いたことに、どちらもシーケンシャルなコードよりも時間がかかります。
もう1つの観察は、同じ数のフォルダのプロセス数が増えるにつれて、必要な時間が長くなることです。私が意味することは、ディレクトリ構造に従っているとします。
/a/a1, /a/a2, /b/b1 and /b/b2
フォルダaとbをコピーする2つのプロセスを作成すると、2分と仮定します。 フォルダa/a1、a/a2、b/b1、b/b2をコピーするプロセスを4つ作成すると、約4分かかります。私はスレッド処理については不明なマルチプロセッシングでのみこれを試しました。
私は何が起こっているのか分かりません。誰にも同様の問題があったでしょうか? Pythonでマルチプロセッシング/スレッドを使用するために共有できるベストプラクティスはありますか?
おかげ Abhijit
あなたの問題はIOバウンドの可能性が高いため、より多くの並列化が役に立ちません。あなたが見てきたように、IO要求がさまざまなスレッド/プロセス間を行き来するように要求することによって、おそらく問題が悪化しています。データがコンピュータ上でどのくらい速く移動できるか、特にディスクが関係している場合は、実際的な制限があります。 – Joe
@Joeそれは答えです。それを一つに移動すれば、私の投票権が得られる。 – agf
複数のプロセスがディスクの複数のヘッドを高速化するためには、独立して動作する必要があります。しかし、それは彼らがどのように働くかではありません。 –