1. 程式人生 > >簡便方式-獲取Python執行緒的真假返回值

簡便方式-獲取Python執行緒的真假返回值

編寫某指令碼時需要獲取執行緒中報錯資訊來做出判斷,而執行緒是不帶返回值的。因為執行緒有獨立的棧,執行緒產生的異常發生在不同的棧上,因此利用try..except無法捕捉到執行緒的報錯,也無法獲取執行緒呼叫的函式的返回值。

網上有利用類的變數來傳遞執行緒內的訊息,也有使用 Queue 庫建立佇列例項來傳遞資料的。但總覺得有些“臃腫”,不太滿意。思考著突然豁然開朗,可以線上程執行的函式內部判斷埠的連線情況,然後用threading.Event()的標誌設定與否,來傳遞結果,讓主函式知道接下來該如何執行。設定了標誌說明要進行下一步操作,未設定標誌則return退出當前操作。 

就是將原本要傳的值,在函式內就做了處理判斷,threading.Event()只能向外傳遞True or False。

關於threading.Event()的基礎知識可參考:https://blog.csdn.net/u012067766/article/details/79734630

 

示例:

# -*- coding: utf8 -*-
import threading


def  mm(i,event1):
    
    try:
        i2=i+"str"  #程式會在這裡報錯
    except:
        if i==9:
            event1.set()


for i in range(0,10):
    
    event1 = threading.Event() 
    
    t1 = threading.Thread(target=mm, args=(i,event1))
    t1.start()

    if not event1.isSet():
        print str(i)+": False"
        
    if event1.isSet():
        print str(i)+": True"

執行結果:

0: False
1: False
2: False
3: False
4: False
5: False
6: False
7: False
8: False
9: False
9: True