threading類沒有返回值,可以重新定義mythread類實現有返回值
import threading
import time
class
mythread
(threading.thread)
:def
__init__
(self,func,args=()
):super()
.__init__(
)#初始化父類屬性
self.func = func
self.args = args
defrun(self)
: self.result = self.func(
*self.args)
#執行緒類例項start的時候先呼叫這個run方法,這個run方法會呼叫執行緒中target指定方法,指定方法返回值用self.result暫存。
defget_result
(self)
:try
:return self.result # 如果子執行緒不使用join方法,此處可能會報沒有self.result的錯誤
except exception:
return
none
deffoo
(a,b,c)
: time.sleep(1)
return a*
2,b*
2,c*
2st = time.time(
)li =
for i in
range(4
):t = mythread(foo,args=
(i,i+
1,i+2)
) t.start(
)# 執行遍歷後會產生4個耗時執行緒,但不影響下面的遍歷。
for t in li:
t.join(
)# 一定要join,不然主線程比子執行緒跑的快,會拿不到結果,主線程等待子執行緒執行結束。
print
(t.get_result())
#每個執行緒例項都呼叫對應方法的返回值。
et = time.time(
)print
(et - st)
輸出結果(0,
2,4)
(2,4
,6)(
4,6,
8)(6
,8,10
)1.0
本來四個耗時執行緒需要四秒執行完,使用多執行緒1秒鐘執行完,相當於同時執行四個任務。 自定義異常類
自定義並捕獲 一 第一種定義方式,繼承exception類 public class myfirstexception extends exception public myfirstexception string msg public myfirstexception string msg,th...
自定義異常類
除了程式裡已經定義好的標準異常類以外,還可以自定義自己的異常類,但通常也和其他標準異常類一樣派生於exception類例如對於乙個 類,如果規定當且僅當任意兩邊長度之和大於第三邊,才能試圖建立乙個三角形或者改變乙個邊長時也不要改變此性質。如果改變了丟擲乙個異常 同時每條邊不能是負數,否則也丟擲異常。...
自定義執行緒類
根據需求定義執行緒類 import threading from time import 建立執行緒類,繼承threading.thread類 初始化func,args,name等引數,這裡testthread類重寫父類threading.thread了 init 方法 super 函式 解決了子類...