2014-01-24 53 views
1

我在使用python中的線程時遇到了一些麻煩。 由於某些原因,我必須創建2個線程。每個線程都做着幾乎相同的事情: 一個接收數據併發送它們的循環。 我的問題是:我不知道如何阻止這些線程。數據連續發送。 我試圖使用「KeyboardInterrupt」和「myThread.daemon」,但循環仍在控制檯中運行。 所以,如果你知道一個解決方案來阻止他們(用'CTRL + C'或'Keypressed'),我會很開心。停止兩個循環線程連續接收和發送數據

這裏是我的代碼的全球運作:

#=========# 
#Thread 1 # 
#=========# 
class ThreadEmissionSerie1(threading.Thread): 
     def __init__(self): 
       threading.Thread.__init__(self) 
     def run(self): 

       variable = 0 
       while 1: 
         try: 
           print "variable 1 : ", variable 
           variable += 2 
         except: 
           pass 

#=========# 
#Thread 2 # 
#=========# 
class ThreadEmissionSerie2(threading.Thread): 
     def __init__(self): 
       threading.Thread.__init__(self) 
     def run(self): 
       variable = 0 
       while 1: 
         try: 
           print "variable 2 : ", variable 
           variable += 3 
         except: 
           pass 


print "starting the threads" 

th_E1 = ThreadEmissionSerie1() 
th_E2 = ThreadEmissionSerie2() 

th_E1.daemon = True 
th_E2.daemon = True 
th_E1.start() 
th_E2.start() 

我希望有人能幫助我:) 這個程序應該在Windows和Linux 由於運行, 亞瑟

+0

你能澄清你的問題嗎?上面顯示的代碼在啓動後幾乎立即結束 - 主線程結束,然後守護進程關閉(當它們是唯一的線程時),並停止。如果在此代碼的末尾添加while 1:pass,它會一直運行,直到您點擊ctrl-C,然後退出。問題是什麼? – GreenAsJade

+0

我的問題是,代碼永遠不會停止。我在Windows XP上,使用python2.7,並且程序仍然在控制檯中運行,同時按下ctrl-C。 也許你運行它與Windows控制檯(它立即停止..)? 嘗試它在蟒蛇殼oppingning與IDLE – tutur29

+0

確實,我試圖在linux上添加「while 1:pass」 在最後,它的工作原理。我不明白爲什麼在Windows(python外殼)它不能正常工作... – tutur29

回答

1

我認爲,答案是我評論說:在IDLE下,「模塊」以IDLE的shell作爲主線程運行,所以守護線程不會死亡。

+0

謝謝,這很奇怪,但可能是真的。謝謝你的幫助 ! – tutur29