作者 主題: thread 的使用  (閱讀 11615 次)

0 會員 與 1 訪客 正在閱讀本文。

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
thread 的使用
« 於: 2009-11-11 10:18 »
請問一下各位前輩,當我建立了一個thread 之後要怎麼樣才能去存取他的數值或是呼叫他的方法?

比方說:
import time
import sys
from random import randint
from threading import *


class testit(Thread):
   def __init__ (self,name,number):
      Thread.__init__(self)
      self.name= name
      self.number = number
   def run(self):
      print "Item:",self.name,":",id(self)
   def show(self):
      print "Item",self.name,"'s ID is:",id(self)
      print "Item",self.name,"'s Number is:",self.number


print time.ctime()
testits = []


for host in range(1,3):
   number = randint(1,10000)
   ship= str(host)
   star= testit(ship,number)
   star.start()


time.sleep(1)
print "finished!"


像這一段的話,我要怎麼樣才能呼叫個別的show 或是查詢他們的number?


另外如果我沒有打上time.sleep(1) 這行的話,輸出結果就會變成:
Tue Nov 10 14:43:35 2009
Item: 1 : 18896336
Item: 2 : finished!


這是因為在star 2輸出id 前,程序就先結束了嗎?
如果在我沒打sleep的話,跑到這裡就會整個卡住了。這又是為什麼??


因為在網路上只找到如何建立多個thread而沒看到講溝通的方法,所以還麻煩各位前輩指導一下了,謝謝 :)
Knowledge is Power

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: thread 的使用
« 回覆 #1 於: 2009-11-11 11:02 »
要用 join() 來等.

代碼: [選擇]
for host in range(1,3):
    number = randint(1,10000)
    ship= str(host)
    star= testit(ship,number)
    star.start()
    testits.append( star )

print "waiting for threads..."
for t in testits:
    t.join()
#time.sleep(1)

溝通方法有很多,像 mutex, semaphore, share memory...等等,建議找 tutorial 來看
把 python thread tutorial 丟到 google 去找,有很多...
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
回覆: thread 的使用
« 回覆 #2 於: 2009-11-11 11:05 »
謝謝 elleryq 的指點,小弟再去找相關資料來看 :)
Knowledge is Power