有沒有辦法用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. 殺死GDB中的特定線程
- 2. 殺死一個線程
- 3. 殺死一個線程
- 4. 殺死一個python進程
- 5. Python的線程,殺死線程
- 6. 在Python中殺死線程
- 7. GDB可以殺死一個特定的線程嗎?
- 8. 殺死另一個進程的線程
- 9. 殺死主線從子線程python
- 10. 我如何殺死python中的線程
- 11. 殺死一個線程不起作用
- 12. 如何殺死一個C#線程?
- 13. 在java中殺死一個線程android
- 14. 如何殺死一個線程?
- 15. 在PropertyListener中殺死一個線程(JavaFX8)
- 16. 在SwingUtilities.invokeLater()中殺死一個線程
- 17. 殺死一個線程或替代
- 18. Android:殺死線程
- 19. 殺死ASP.NET線程
- 20. 一個線程如何在另一個線程中被殺死
- 21. 如何使用Powershell來殺死特定進程ID的線程
- 22. 在Python中殺死所有線程
- 23. 停止或殺死Python線程
- 24. 後來在Python中殺死線程
- 25. Python - 無法用KeyboardInterrupt殺死主線程
- 26. 殺死特定的Java應用程序
- 27. 殺死特定的PHP進程
- 28. 殺死線程,真的!
- 29. 殺死暫停的線程
- 30. 爲什麼python不支持殺死一個線程?
如果您必須殺死一個線程才能讓程序正常工作,那麼您正在執行一些非常錯誤的操作*。 – 2012-08-07 21:40:17
定期循環檢查一些布爾變量,讓它成爲'proceed'。在主線程中,當另一個線程停止時,設置「proceed = False」;它會在下一次迭代時停止。 – 9000 2012-08-07 21:43:18
你能更詳細地描述這個問題嗎?也許有更好的解決方案。我的意思是肯定有比殺死線程更好的解決方案。但是,也許你可以使用threading.Lock()對象來解決你的問題 – 2012-08-07 21:59:51