檢視源碼:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOzEDM1MjY1ETOzQjMzkjMzYzX3QzMyETMwIzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
這是一個線程控制的類,這個類可以被子類化(繼承)在一定的條件限制下,這裡有兩種方式去明确活動:第一通過傳入一個callable 對象也就是調用對象,一種是通過重寫這個Thread類的run方法
def add():
pass
print(callable(add))
從的上面實作多線程方式可以看出要了解Thread類的實作,我們主要看下構造函數__init__()和run方法這兩部分核心代碼就可以明白如何清晰的去使用這threading.Thread類的調用實作多線程:
2.1先看下構造函數的參數:
主要包含如下幾個:
group: 參數指出是作為一個future extend 未來開發的拓展實作線程組的參數
target :需要傳入的是一個可以被run方法調用的可調用對象 callable object
name: 是一個線程名字這裡沒有指定類型可以str,int一般當然你也可以在子類繼承Thread類的時候使用super初始化一個name如:
super(SubClass,self).__init(name="ThreadName")
args用來解包參數的就不介紹了(a,b)或者*list1,或者(a,)等等
**kwargs 關鍵字參數,我用的比較少
最後一句很人性化,提醒你在進行subclass 子類覆寫了構造函數的時候,請確定線程在調用前進行了父類構造函數Thread.__init__(ParentclassVar)的初始化對于任何線程:
第一種寫法
def __init__():
Thread.__init__(Parent_var) # python2寫法 ,but now is less readable
super(Subclass,self).___init(Parent_var)<===> super().__init(Parent_var) # python3寫法
除了以上的顯示參數以外,還有通過@property,定義的參數:
@property
def name(self):
線程名
@property
def ident(self):
線程辨別符
@property
def daemon(self):
守護線程
此外:is_alive用來判斷線程是否存活
線程和守護線程daemon名稱設定擷取:
def isDaemon(self):
return self.daemon
def setDaemon(self, daemonic):
self.daemon = daemonic
def getName(self):
return self.name
def setName(self, name):
self.name = name
此外還有:三個全局的比較有用:
擷取目前存活的線程的對象清單