自定義Thread類

2021-10-08 09:54:16 字數 1278 閱讀 9337

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 函式 解決了子類...