0

スレッドの結果をリストに表示したい。

次のサンプルコードがあります。

def parallelizer_task(processor,input,callback):
    output = processor(input)
    if callback:
        callback(output)
    return output

class ThreadsParallelizer(Parallelizer):

    def parallelize(self,processors,input=None,callback=None):
        threads = []
        for processor in processors:
            t = threading.Thread(target=parallelizer_task,args=(processor,input,callback))
            threads.append(t)
            t.start()
        return threads
parallelizer = ThreadsParallelizer

しかし、スレッドリストの出力は次のとおりです。

* <Thread(Thread-1, started 4418719744)>
* <Thread(Thread-2, started 4425617408)>
* <Thread(Thread-3, started 4429950976)>

スレッドの結果をリストにする方法はありますか?

4

1 に答える 1

1

はい、そのためにたとえば を使用できますjoin。子スレッドが作業を完了するまで、メインスレッドを強制的に待機させます。threading.Thread次に、次のように、データをオブジェクトに格納できます。

def parallelizer_task(processor,input,callback):
    output = processor(input)
    if callback:
        callback(output)

    # Attach result to current thread
    thread = threading.currentThread()
    thread.result = output


class ThreadsParallelizer(Parallelizer):

    def parallelize(self,processors,input=None,callback=None):
        threads = []
        for processor in processors:
            t = threading.Thread(...)
            threads.append(t)
            t.start()

        # wait for threads to finish
        for th in threads:
            th.join()

        # do something with results
        results = [th.result for th in threads]
        return results
于 2013-03-11T14:00:44.303 に答える