threading 模塊簡介

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()

運行結果如圖


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 線程 引言&動機 考慮一下這個場景,我們有10000條數據需要處理,處理每條數據需要花費1秒,但讀取數據只需要0....
    不浪漫的浪漫_ea03閱讀 375評論 0 0
  • 引言&動機 考慮一下這個場景,我們有10000條數據需要處理,處理每條數據需要花費1秒,但讀取數據只需要0.1秒,...
    chen_000閱讀 527評論 0 0
  • 現翻譯了python3.5中threading模塊中的部分類,關于鎖以及后續的一些類會逐步更新(更新在本篇文章中)...
    jockerMe閱讀 3,033評論 1 5
  • 線程狀態新建,就緒,運行,阻塞,死亡。 線程同步多線程可以同時運行多個任務,線程需要共享數據的時候,可能出現數據不...
    KevinCool閱讀 824評論 0 0
  • 我叫南薔,“不撞南墻不回頭”的南薔。 我曾深深愛過一個人,他的名字叫嚴謹。 1 “小薔,這是嚴老師,以后讓他輔導你...
    冰糖陳皮閱讀 8,426評論 186 213