所以我寫這個劇本:Python的不同線程正在扼殺整個程序
def schedule_setup():
# KILL OLD THREADS SHOULD THEY EXIST
global active
active = False
time.sleep(3)
active = True
global threadlist
threadlist = []
try:
sql = "SELECT TIME_TO_RUN FROM time_table"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
#row[0].strftime('%H:%M')
t = threading.Thread(target=th,args=(row[0].strftime('%H:%M'),))
t.start()
threadlist.append(t)
# JOIN all threads to main memory
#for count in threadlist:
#count.join()
sql = "UPDATE motor SET UPDATE_SCHEDULE = 0"
try:
cursor.execute(sql)
# commit the changes in database
db.commit()
except:
# Rollback in case there is any error
print "no worky"
db.rollback()
except:
print "Error: UNABLE TO GET TABLE DATA"
它需要在SQL時間設置和創建一個計劃的事件做一個動作。我把所有活動線程的線程「殺手」放在開頭,這樣如果我再次調用這個線程,因爲時間已經更新,它可以殺死舊的線程並用新線程替換它們。它所有的工作我怎麼想,但只要動作被稱爲整個程序崩潰...這裏是它調用的代碼:
def th(run_time):
global active
schedule.every().day.at(run_time).do(run_motor)
while active == True:
schedule.run_pending()
time.sleep(1)
怎麼看線程檢查每一秒?所以線程在我嘗試創建新線程時被殺死,但是當「run_motor」被調用時,後綴應該是無限循環的主程序,有時還有其他線程仍然在運行,所以這對我來說很奇怪。
「崩潰」究竟意味着什麼?你有錯誤信息嗎?你有追溯嗎?如果是這樣,請爲我們拼出來。 –
順便說一句,既然你說有時線程還在繼續,肯定你的'time.sleep(3)'不足以讓所有的線程結束。儘管這裏沒有足夠的信息來猜測爲什麼。如果你想確保他們完成了,你應該是'.join()'線程 - 睡眠永遠不是一個可靠的選擇。 –
如果你在代碼中修正了縮進 - 例如'schedule_setup()'結束了,那麼它也會有所幫助;-)因爲所有內容都與左邊界齊平。 –