Python線程專題3:thread對象

上一篇文章: Python線程專題2:多線程共享全局變量
下一篇文章: Python線程專題4:Timer對象、Lock對象、Rlock對象

Thread對象

Thread類用於表示單獨的控制線程。segmentfault

語法:

t=Thread(group=None,target=None,name=None,args=(),kwargs={})
建立一個新的Thread實例:t

group:爲之後擴張保留的,默認爲None

target:一個可調用對象,線程啓動時,run()方法將調用此對象

name:線程名稱,默認建立一個「Thread-N」格式的惟一名稱。

args:傳遞給target函數的參數元祖

kwargs:傳遞給target的關機字參數的字典。

經常使用屬性於方法

t.start():經過在一個單獨的控制線程中調用run(),啓動線程,此方法只能被調用一次。

t.run():線程啓動時將調用此方法。默認狀況下,他會調用目標函數target。還能夠在Thread的子類中從新定義此方法。

t.join([timeout]):阻塞線程,等待直到線程終止或者出現超時爲止。timeout是以秒爲單位的超時時間。
線程啓動以前不能調用此方法,不然會報錯。

t.is_alive:若是線程是活動的,返回True,不然返回False,從start()返回的那一刻開始,線程就是活動的,
直到run()方法終止爲止。

t.name:線程名稱,這個字符串用於惟一標識,能夠根據須要將它更改成更有意義的值,

t.ident:整數線程標識符,若是線程還沒有啓動,它的值爲None。

t.daemon:若是線程是後臺線程,該值爲True,不然未False。當不存在任何任何活動的非後臺進程時,整個程序會退出。

實例1:利用Thread對象,簡單建立一個線程,並啓動一個函數

代碼:
#利用Thread對象,簡單建立一個線程,並啓動一個函數
from threading import Thread
import time
def mark(interval):
    print("循環等待時間時間%d,等待前時間:%s"%(interval,time.ctime()))
    time.sleep(interval)
    print("等待後的時間:%s"%time.ctime())

if __name__=="__main__":
    t=Thread(target=mark,args=(3,))
    t.daemon=False#設置爲非後臺線程,否則會看不到自線程打印效果主線程就直接關閉了
    #下面一句會報錯,必須在start()方法以後調用
    #t.join(3)
    t.start()
    #下面語句也會報錯,由於start只能調用一次
    #t.start()
    print("end")
結果:

圖片描述

實例2:經過繼承Thread,實現線程類

代碼:多線程

#經過繼承Thread,實現線程類
from threading import Thread
import time

class MyThread(Thread):
    def __init__(self,interval):
        #下面語句用來調用基類方法,必須調用
        Thread.__init__(self)
        self.daemon=False
        self.interval=interval
    def run(self):
        print("循環等待時間時間%d,等待前時間:%s" % (self.interval, time.ctime()))
        time.sleep(self.interval)
        print("等待後的時間:%s" % time.ctime())

if __name__=="__main__":
    t=MyThread(3)
    t.start()
    #爲了方便查看打印效果,加了一秒延遲
    time.sleep(1)
    print("end")

結果:ide

圖片描述

相關文章
相關標籤/搜索