25

パスのリストを取得し、その元のリストの下にあるすべてのファイル パスを含むファイルを生成する単純なアプリを Java で作成しました。

次のpaths.txtがある場合:

c:\folder1\
c:\folder2\
...
...
c:\folder1000\

私のアプリは、マルチスレッド化された各パスで再帰関数を実行し、これらのフォルダーの下にあるすべてのファイル パスを含むファイルを返します。

今度は、このアプリを Python で書きたいと思います。

os.walk()特定のフォルダーを実行し、ファイルパスを出力して出力する単純なアプリを作成しました。

今、私はそれを並行して実行したいのですが、Python にはこのためのモジュールがいくつかあることがわかりました: マルチスレッドとマルチプロセッシングです。

これをどうするのが一番いいですか?そしてその中で、それはどのように実行されますか?

4

3 に答える 3

6

これは、私にとって便利な Python のスレッドのパターンです。ただし、スレッドが CPython で動作する方法が原因で、スレッド化によってパフォーマンスが向上するかどうかはわかりません。

import threading
import Queue
import os

class PathThread (threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def printfiles(self, p):
        for path, dirs, files in os.walk(p):
            for f in files:
                print path + "/" + f

    def run(self):
        while True:
            path = self.queue.get()
            self.printfiles(path)
            self.queue.task_done()

# threadsafe queue
pathqueue = Queue.Queue()
paths = ["foo", "bar", "baz"]

# spawn threads
for i in range(0, 5):
    t = PathThread(pathqueue)
    t.setDaemon(True)
    t.start()

# add paths to queue
for path in paths:
    pathqueue.put(path)

# wait for queue to get empty
pathqueue.join()
于 2012-08-12T08:35:45.950 に答える