2017-06-19 11 views
0

私はarrayの要素を合計し、マルチスレッドを使って出力するコードを書いています。しかし、グローバルな値を使う代わりに、ローカルの値を使用してそれを返すことができます。しかし、私は戻り値を使用するスレッドdie.Anyアイデアを行う方法については?Pythonでスレッドから値を返す方法は?

import threading 
import time 

total = 0 

class myThread(threading.Thread): 
    def __init__(self,threadId,name,starts,ends): 
     threading.Thread.__init__(self) 
     self.threadId = threadId 
     self.name = name 
     self.starts = starts 
     self.ends = ends 
    def run(self): 
     print "strating " + self.name 
     threadLock.acquire() 
     calc_sum(self.starts,self.ends) 
     threadLock.release() 

def calc_sum(start,end): 
    global total 
    for i in xrange(start,end): 
     total += arr[i] 

threadLock = threading.Lock() 
threads = [] 

arr = [1,2,3,4,5,6,7,8,9,10] 

thread1 = myThread(1,'t1',0,5) 
thread2 = myThread(2,'t2',5,10) 

thread1.start() 
thread2.start() 

threads.append(thread1) 
threads.append(thread2) 

for t in threads: 
    t.join() 

print total 

答えて

0

グローバル変数は適切ではありません。 結果をself.totalに入れるのはどうですか? 次に、あなたの結果にアクセスします。

for t in threads: 
    total += t.total 

print(total) 
+0

どのようにしてt.totalとしてスレッドにアクセスできますか?あなたは私をもっとはっきりと説明できますか? –

+0

スレッドはリストであり、 を 'スレッド中にする ' あなたはスレッドを1つ取ります。次に、あなたの帰属合計を呼び出します。実際には、合計をグローバルに保存する代わりに、self.totalに保存します。 – fjcf1

関連する問題