Python提供了幾個用於多線程編程的模塊,包括thread, threading和Queue等。thread模塊提供了基本的線程和鎖的支持。threading模塊提供了更高級別,功能更強的線程管理功能。Queue模塊能夠建立一個多個線程之間共享數據的隊列。編程
下面介紹threading模塊多線程
Thread 是threading模塊中最重要的類之一,能夠使用它來建立線程。有兩種方式來建立線程:一種是經過繼承Thread類,重寫它的run方法;另外一種是建立一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象做爲參數傳入。下面分別舉例說明。先來看看經過繼承threading.Thread類來建立線程的例子:app
#create a thread with a function import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): print 'start loop', nloop, 'at:', ctime() sleep(nsec) print 'loop', nloop, 'done at:', ctime() def main(): print 'starting at:', ctime() threads=[] nloops = range(len(loops)) for i in nloops: #create the thread with the function, target= function name, args = function arguments t = threading.Thread(target=loop, args=(i, loops[i])) threads.append(t) for i in nloops: #start threads threads[i].start() for i in nloops: #wait for all threads[i].join() print 'all done at', ctime() if __name__ == '__main__': main()
這裏要說明一下run方法 和start方法: 它們都是從Thread繼承而來的,run()方法將在線程開啓後執行,能夠把相關的邏輯寫到run方法中(一般把run方法稱爲活動[Activity]。);start()方法用於啓動線程。ide
介紹一下threading.Thread類的初始化函數原型:函數
def __init__(self, group=None, target=None, name=None, args=(), kwargs={})oop
Thread類還定義瞭如下經常使用方法與屬性:spa
用於獲取和設置線程的名稱。線程
獲取線程的標識符。線程標識符是一個非零整數,只有在調用了start()方法以後該屬性纔有效,不然它只返回None。code
判斷線程是不是激活的(alive)。從調用start()方法啓動線程,到run()方法執行完畢或遇到未處理異常而中斷 這段時間內,線程是激活的。對象
調用Thread.join將會使主調線程堵塞,直到被調用線程運行結束或超時。參數timeout是一個數值類型,表示超時時間,若是未提供該參數,那麼主調線程將一直堵塞到被調線程結束