有沒有辦法用Python殺死一個特定的線程?我有一個線程運行一個循環的函數,它干擾了程序的其他部分。當某個功能開始時,我需要殺死它,有沒有辦法做到這一點?殺死一個特定的線程Python
0
A
回答
2
要做到這一點,最好的方法是使用線程定期檢查的退出標誌,並在設置後退出。當你需要殺死線程時,你可以設置這個標誌並等待線程自行退出。
This answer有關於爲什麼強行殺死線程的其他信息是一個壞主意,以及上述方法的Python實現。
0
我發現如果您定義了一個帶有self.flag
變量的Threading類,並且讓該函數調用該類的函數,則可以在特定於線程的實例上設置該標誌並使用if語句退出特定的線程。
不難想象這更加動態,並且允許產生和關閉線程。
class AutoPilotThreader(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.flag = 0
def run(self):
print "Starting " + self.name
self.SelTestRun()
print "Exiting " + self.name
def SelTestRun(self):
# do code
while 1:
if self.flag:
return
else:
time.sleep(1)
my_threads = []
t1 = AutoPilotThreader(1, "t1")
t2 = AutoPilotThreader(2, "t2")
t1.start()
t2.start()
my_threads.append(t1)
my_threads.append(t2)
while 1:
print("What would you like to do: 1. Quit 2. Start New 3. Check")
choice = input("Enter : ")
if choice == 1:
choice = input(" 1 or 2 or 3 ")
if choice == 1:
t1.flag = 1
elif choice ==2:
t2.flag = 1
elif choice ==3:
t3.flag = 1 .........
相關問題
- 1. 殺死一個線程
- 2. GDB可以殺死一個特定的線程嗎?
- 3. 殺死一個線程或替代
- 4. 殺死一個線程不起作用
- 5. 在SwingUtilities.invokeLater()中殺死一個線程
- 6. 在java中殺死一個線程android
- 7. 如何殺死一個C#線程?
- 8. 如何殺死一個線程?
- 9. 在PropertyListener中殺死一個線程(JavaFX8)
- 10. 我如何殺死python中的線程
- 11. 一個線程如何在另一個線程中被殺死
- 12. 後來在Python中殺死線程
- 13. 停止或殺死Python線程
- 14. 殺死特定的Java應用程序
- 15. 殺死暫停的線程
- 16. 按Ctrl-C,即一個KeyboardInterrupt殺死線程在python
- 17. 殺死一個mpi進程
- 18. 如何殺死線程從另一個線程在vala
- 19. 如何從主線程突然殺死一個線程?
- 20. 殺死特定名稱
- 21. 如何在C中處理/殺死一個鎖定線程#
- 22. 殺死線程導致SIGSEGV
- 23. 殺死非等待線程
- 24. 用pthreads殺死線程 - C
- 25. 線程殺死超時
- 26. 殺死事件線程
- 27. 在java中殺死線程
- 28. 如何殺死主線程?
- 29. 殺死線程在pthread庫
- 30. 如何殺死MFC線程?
如果您必須殺死一個線程才能讓程序正常工作,那麼您正在執行一些非常錯誤的操作*。 – 2012-08-07 21:40:17
定期循環檢查一些布爾變量,讓它成爲'proceed'。在主線程中,當另一個線程停止時,設置「proceed = False」;它會在下一次迭代時停止。 – 9000 2012-08-07 21:43:18
你能更詳細地描述這個問題嗎?也許有更好的解決方案。我的意思是肯定有比殺死線程更好的解決方案。但是,也許你可以使用threading.Lock()對象來解決你的問題 – 2012-08-07 21:59:51