python多線程的學習

1.基本概念python

  • 使用多線程編程,以及相似queue的共享數據結構,這個編程任務能夠規劃成幾個執行特定函數的線程。
  • qingUserRequestThread:負責讀取客戶端輸入,該輸入可能來自I/O通道,程序將建立多個線程,每一個客戶端一個,客戶端的請求將會被放入隊列中。
  • RequestThread:該線程負責從隊列中獲取請求並進行處理,爲第3個線程提供輸出。
  • ReplyThread:負責向用戶輸出,將結果傳回給用戶(若是是網絡用戶),或者把數據寫到本地文件系統或數據庫中。
  • 進程:執行中的程序。每一個進程擁有本身的地址空間,內存,數據棧,以及其餘用於跟蹤執行的輔助數據。操做系統管理其上的全部進程的執行,併爲這些進程合理分配時間。進程也能夠經過派生(fork或spawn)新的進程來執行其餘任務,不過每一個新進程也都擁有本身的內存和數據棧等,因此只能採用進程間通訊(PIC)的方式來共享信息。
  • 線程:與進程類似,可是在同一個進程下執行的,並共享相同的上下文。能夠將他們認爲是一個主進程或「主線程"中運行的迷你進程。
  • 線程包括開始,執行順序,和結束三個部分。他有一個指令指針,用於記錄當前運行的上下文,當其餘線程運行時,他能夠被搶佔(中斷)和臨時掛起(睡眠)--這種作法叫作讓步
  • 全局解釋鎖:Python的解釋器當中,任意時刻只有一個線程會被解釋器執行。對Python虛擬機的訪問是由全局解釋鎖(GIL)來控制的,這個鎖是用來保證同時只能有一個線程執行。
  1. 執行步驟:設置GIL
  2. 切換進一個線程去運行
  3. 執行下列操做之一:a.指定數量的字節碼指令b.線程主動讓出控制權(能夠調用來完成time.sleep(0))
  4. 把線程設置回睡眠狀態
  5. 解鎖GIL
  6. 重複上述步驟
  • 退出線程:當一個線程完成函數時,他就回退出。還能夠經過調用諸如thread.exit()之類的方法,sys.exit()退出,或拋出SystemExit異常來使線程退出。但你不能直接終止一個線程

2.python的threading模塊數據庫

  • Thread:表示一個執行線程的對象
  • Lock:鎖原語對象
  • RLock:可重入鎖對象,使單一線程能夠再次得到已持有的鎖(遞歸鎖)
  • Condition:條件變量對象,使得一個線程等待另外一個線程知足特定的條件
  • #!/usr/bin/env python
    import threading
    def haha(max):
        for i in range(max):
            print max
    
    def main():
        threads =[]
        n=range(10)
        for i in n:
            t=threading.Thread(target=haha,args=(10,))  #實例化Thread對象,把target(函數)和args(參數)傳進去,而後得到Thread對象
            threads.append(t)
    
        for i in n:
            threads[i].start()#當全部的線程都分配完成以後,經過調用每一個線程的start()方法讓他們執行
        for i in n:
            threads[i].join()#爲每一個線程調用join()方法。join()方法將等待線程結束,或者在提供了超時時間的話,達到超時時間。
    
    if __name__ == "__main__":
        main()
相關文章
相關標籤/搜索