5

指定されたディレクトリを再帰的にたどり、見つかった各ファイルのチェックサムを計算する python スクリプトがあります。次に、すべてのファイル パスとそれらの md5 チェックサムをリストするログ ファイルを書き込みます。

順次、15 MB の 50,000 ファイルの場合、これには長い時間がかかります。しかし、私のコンピューターには、実際に使用しているよりもはるかに多くのリソースがあります。スクリプトがより多くのリソースを使用してより高速に実行されるように、アプローチを調整するにはどうすればよいですか?

たとえば、ファイル リストを 3 分の 1 に分割し、それぞれに対してスレッドを実行すると、3 倍のランタイムが得られるでしょうか?

私はスレッド化にあまり慣れていません.

これが私の順次 md5 ループのコードです。

for (root, dirs, files) in os.walk(root_path):
    for filename in files:
        file_path = root + "/" + filename
        md5_pairs.append([file_path, md5file(file_path, 128)])

事前にご協力いただきありがとうございます。

4

4 に答える 4

5

この種の作業では、 multiprocessing.Pool を使用すると驚きが少なくなると思います - http://docs.python.org/library/multiprocessing.htmlで例とドキュメントを確認してください

于 2012-04-12T20:06:19.133 に答える
0

スレッドを使用する場合は、まずスレッドを開始し、それらのスレッドが Queue.Queue インスタンスから作業をポーリングするようにする必要があります。次に、メイン スレッドで for ループを実行しますが、md5file(..) を呼び出す代わりに、すべての引数を Queue.Queue にプッシュします。 Threading / Queue in Pythonには例がありますが、ドキュメントも参照してください: http://docs.python.org/library/queue.html

于 2012-04-12T20:16:38.637 に答える