2016-06-15 3 views
0

私はシンプルなpythonプログラムを使って、コンピュータ上の各ファイル名を繰り返して、画像のファイルタイプやファイルタイプを確認しています。Faster For Loops Python

for i in drives: 
    for root, dirs, files in os.walk(str(i.replace("\\","\\\\"))): 
     #print(root,dirs) 
     for file in files: 
      if file.endswith(".jpeg"): 
       pictures.append(file) 

あなたはそこにこの操作を加速するGPUに何らかの方法であるか、あなたが私を指すことができる場合、私は(私は彼らが私にはわからないこのネスティングを呼んだと思う)ループグループのために、単純なを使用して、私が思っていたことがわかり私は効率を別の方法で向上させることができます。 キーワードに関するファイルパスの検索について質問がありましたが、効率を改善する方法を求めています。

+3

を助けた可能性があるでしょう:このリンクを参照してください。 GPUアクセラレーション*ディスクI/O。* – kindall

+1

ここでボトルネックはディスクI/Oです。ソフトウェアでは何もできません。 – BlackBear

答えて

1

ディスクI/Oの制限のために、 (コメント状態として)。ただし、os.walk(...)を使用する代わりに、os.scandir(...)を使用すると、より速くスピードを出すことができます。あなたが最初の行あなたにドライバによってスレッドと異種つのスレッドを使用することができますhttps://www.python.org/dev/peps/pep-0471/

+0

os.scandirモジュールを調べましたが、出力の参照が見つかりません。それは歩行機能に似ていますか? – waudy

+0

ジェネレータオブジェクトを返します。それはアセンブリが必要です(再帰的にループしたい場合は独自の再帰関数を作成する必要があります)が、使用するとかなり高速になります。ドキュメントによると、2倍から20倍の速さになる可能性があります。 – Brian

0

...そしてあなたがより速く

q = Queue() 
for i in drives: 
    t = Thread(target=your_method, args=(q,pictures)) 
    t.daemon = True 
    t.start() 
q.join() 

希望はあなたが本当にでき

+0

この方法を使うと、彼はmutexを 'pictures'に置く必要があります。さもなければ、あなたは競合条件を作りました – Brian