簡體   English   中英

Python結束線程,當函數從結束處調用並從線程傳遞異常時

[英]Python end thread when function it's called from ends and pass up exception from thread

我有以下代碼,我在后台定期運行檢查 5 何時被隨機 int 生成器擊中。

我遇到困難的地方是:

  1. 當它命中時:當它命中 5 時傳遞來自運行 random_error 的線程的異常,這樣它就可以被 test() 函數捕獲並且 test() 結束。

  2. 當它沒有命中時:運行 random_error 的線程停止嘗試並在 test() 結束時結束。

from time import sleep
import threading
import random

def random_error():
    while True:
        sleep(1)
        x = random.randint(1,30)
        print(x)
        if x == 5:
            raise ValueError("5 Hit")

def test():
    try:
        countdown_thread = threading.Thread(target = random_error)
        countdown_thread.start()
        y = 0
        while True:
            sleep(1)
            print('still going')
            y += 1
            if y == 10:
                print('didnt hit in time')
                break
    except:
        print("Error caught!")
    
test()

random_error是與test完全不同的線程。 沒有辦法只傳遞錯誤。

也就是說,您仍然有很多選擇。 test可以查看countdown_thread.is_alive()是否。 您可以讓random_thread在拋出異常之前執行一些操作,例如設置一個變量或將一個值放入隊列中,並為此定期進行test檢查。

但是test不可能得到另一個線程拋出的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM