簡便方式-獲取Python執行緒的真假返回值
阿新 • • 發佈:2018-12-11
編寫某指令碼時需要獲取執行緒中報錯資訊來做出判斷,而執行緒是不帶返回值的。因為執行緒有獨立的棧,執行緒產生的異常發生在不同的棧上,因此利用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