天天看點

python Threading子產品源碼解析

檢視源碼:

python Threading子產品源碼解析

 這是一個線程控制的類,這個類可以被子類化(繼承)在一定的條件限制下,這裡有兩種方式去明确活動:第一通過傳入一個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寫法      
python Threading子產品源碼解析

 除了以上的顯示參數以外,還有通過@property,定義的參數:

@property
def name(self):
線程名      
@property
def ident(self):
線程辨別符      
@property
def daemon(self):
守護線程

此外:is_alive用來判斷線程是否存活      
python Threading子產品源碼解析

 線程和守護線程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

此外還有:三個全局的比較有用:      
python Threading子產品源碼解析

 擷取目前存活的線程的對象清單

python Threading子產品源碼解析

繼續閱讀