2017-12-02 93 views
1

我有一個問題試圖殺死或停止在Python中的線程,因爲沒有任何官方API我試圖找到一種方法來停止指定的線程而不殺死其他人。停止或殺死Python線程

每次我啓動一個線程我給它一個ID

t = threading.Thread(name=slug_ID, target=function) 

現在在主線程中有可能用戶要求停止並刪除線程。由於我啓動了不同的線程,每個線程都有自己的slug_ID。

for thread in threading.enumerate(): 
    if (thread.getName()==slug_ID)): 
     #thread.kill() 

我想立即殺死線程,我已搜索周圍,我發現了兩個可能性:

  • 屬性/標誌:由於線程我騎自行車可以檢查標記是否已被標記並返回,不幸的是線程現在正在不斷地循環,所以例如如果線程正在休眠,那麼將不會立即死亡,而是僅僅檢查標記被檢查的那部分代碼線程將會死亡
  • 信號:當我在主線程上啓動事件時,線程會捕獲事件並優雅地退出,不幸的是我應該創建自定義信號以僅停止我想要殺死的特定線程,像這樣:
try: 
    while True: 
     thread_do_stuff() 
except Custom_signal: 
    #exitThread 

的問題是,我不知道如何箱和捕捉定製的信號,如何任何想法,我可以解決這個問題?

回答

2

Python不提供用於查殺線程的API,因此我們將深入討論here。例如,Java用於公開殺死線程的特定方法,但很久以前它已被刪除。

在Python中,信號僅在main thread中處理。因此,你的第二種方法是行不通的。

如果您需要突然停止併發執行,唯一安全的方法是使用進程而不是線程。