threading包含對象
Thread : 表示一個線程執行對象
Lock :鎖原語對象跟thread模塊了的鎖對象一樣
RLock :可重入鎖對象,使單線程可以再次獲得已經獲得了的鎖(遞歸鎖定)
condition:條件變量對象,能讓線程停下來,等待其他線程滿足了某個條件如狀態改變之
event :通用的條件變量,多個線程可以等待某個事件的發生,在事件發生后所有線程會被激活。
seamphore:為等待鎖的線程提供一個類似等候室的結構
boundedSeamphore:與semaphore類似,只是它不允許超市過初始值
timer :與Thread類似他要等待一段時間后才開始運行。
需要注意的是thread模塊不支持線程守護,當主進程 推出時,線程不論是否還在工作都會直接退出。threading支持線程守護
Thread類
threading的Thread類是你主要的運行對象。他有很多thread模塊了沒有的函數。
thread創建線程的方法主要如下:
創建一個Thread的實例,傳給它一個函數;
創建一個Thread的實例,傳給它一個可調用的類對象
從Thread派生出一個子類,創建一個這個子類的實例。
Thread主要包含的函數如下:
start()開始線程的執行
run()定義線程的功能的函數
join(timeout=None)程序掛起,直到線程結束;如果給了timeout,則最多阻塞timeout秒
getName()返回線程名字
setName()設置線程名字
isAlive()布爾標志,表示這個線程是否在運行中
isDacmon()返回線程的daemon標志
setDaemon()把線程daemon標志設置為dacemonic(一定要在調用start()前調用。
代碼示例如下:
#!/usr/bin/env python
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:
t = threading.Thread(target=loop, args=(i,loops[i]))
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print 'all DONE at:',ctime()
if __name__ == '__main__':
main()
運行結果如圖