2017-08-14 4 views
1

次のコードは、いくつかのスレッドを起動し、それらがすべて行われた後、結果を出力します。完了したスレッドからどのように結果を得るか?

import threading 

results = [None] * 5 
threads = [None] * 5 

def worker(i): 
    results[i] = i 

for i in range(5): 
    threads[i] = threading.Thread(target=worker, args=(i,)) 
    threads[i].start() 

# here I would like to use the results of the threads which are finished 
# while others still run 

for i in range(5): 
    threads[i].join() 

# here I have the results but only when all threads are done 
print(results) 

をコードで述べたように、私は他の人がまだ実行されている間、終了したスレッドの結果を使用したいです。 これを行う正しい方法は何ですか?

私は単にwhile True:ループを持っており、継続的resultsに新しいエントリをチェックしたり、そのような操作のための釜イン機構が指すでしょうthreading.Threadコールの一部として(そこにあるでしょう新しいスレッドを起動する必要がありますスレッドが完了したときのコールバック)?

+0

'multiprocessing.pool輸入ThreadPool'から、あなたはそこからそれを取ることができます。 –

+0

あなたはそれを列挙するかもしれませんか? –

+0

'https://stackoverflow.com/questions/6893968/how-to-get-the-return-value-from-a-thread-in-python'あなたの答えはこちらです – Kallz

答えて

1

あなたは、Python 3、concurrent.futuresを使用しているので、より良いフィットthreadingより:

import concurrent.futures 

results = [None] * 5 

def worker(i): 
    results[i] = i 

with concurrent.futures.ThreadPoolExecutor(5) as pool: 
    futmap = {pool.submit(worker, i): i for i in range(len(results))} 
    for fut in concurrent.futures.as_completed(futmap): 
     print("doing more stuff with", futmap[fut]) 
+0

* concurrent.futuresモジュールは、非同期的に呼び出し可能なコールを実行するための高水準インターフェースを提供します* - これはまさに私が探していたものです。 – WoJ

関連する問題