編輯9/15/16:在我原來的代碼中(仍在下面發表)我試圖用.join()
函數,這是一個愚蠢的錯誤,因爲它只能用於線程對象。我試圖 (1)連續運行一個線程獲取數據並將其保存到文件中 (2)有第二個線程或合併隊列,一旦用戶輸入標誌(即「停止」 )。它不會中斷數據收集/保存線程。(Python)用原始輸入停止線程?
我需要多線程幫助。我試圖運行兩個線程,一個處理數據,另一個檢查一個標誌來停止程序。
我通過反覆試驗瞭解到,如果我的電腦沒有爆炸,我無法打斷一個while循環。另外,我放棄了我的GUI代碼,因爲它讓我的代碼太複雜了多線程。
我想要做的是運行一個線程,從Arduino收集數據,將其保存到一個文件,並重復此操作。第二個線程將掃描標誌 - 可以是raw_input?我想不出任何用戶可以做什麼來停止數據採集程序。
我非常感謝這方面的幫助。這裏是我的代碼(其中很大一部分是僞代碼,你可以看到):
#threading
import thread
import time
global flag
def monitorData():
print "running!"
time.sleep(5)
def stopdata(flag):
flag = raw_input("enter stop: ")
if flag == "stop":
monitorData.join()
flag = "start"
thread.start_new_thread(monitorData,())
thread.start_new_thread(stopdata,(flag,))
我得到的錯誤是這樣的,當我嘗試在IDLE進入「停止」。
未處理異常線程通過 回溯(最近通話最後一個)開始: 文件 「C:\用戶\ otangu〜1 \應用程序數據\本地\ TEMP \ IDLE_rtmp_h_frd5」,第16行,在stopdata AttributeError的:'函數'對象沒有屬性'加入'
我再次非常感謝任何幫助,迄今爲止我已經教會了自己的Python,這是我碰到的第一道巨大的牆。
'.join'是線程對象,而不是功能!我現在明白了。謝謝!:) – Liv
是的,但線程對象來自不同的模塊。線程模塊不能連接線程。 – gavriel