什麼是線程?多線程
把一個進程比喻爲一個車間,那麼線程就是車間裏面的一條條流水線。一個車間能夠有多條流水線,流水線屬於車間。一個車間的工做過程是一個進程,一個流水線的工做過程是一個線程。進程是操做系統資源分配的最小單位(生產科3號車間負責生產3萬件包裝紙箱),線程是cup調度的最小單位(3號車間裏面的每一條生產線負責生產紙箱這個具體的任務)。併發
多線程的概念?spa
就是一個進程中存在多條線程。多線程是數據共享的(共享進程中的空間地址啥的),就是3號車間有多條流水線,都共用了一個車間的資源。操作系統
多線程的應用舉例:線程
辦公三件套之word爲例,打開word軟件就開啓了一個進程,這個進程至少要幹幾件事兒,1監控鍵盤輸入;2處理文字;3定時自動保存文字信息等,這幾件事兒操做的都是同一塊數據,因此不能使用多進程(進程間數據隔離啊),只能在一個進程裏併發的開啓三個縣城,若是是單線程,那就只能是鍵盤輸入時,不能處理文字和自動保存,自動保存時又不能打字。code
開啓線程的兩種方式:
multiprocess模塊徹底模仿了threading模塊的接口,兩者在使用層面,有很大的類似性。對象
方式一:blog
from threading import Thread import time def sayhi(name): time.sleep(2) print('say hi %s' % name) if __name__ == '__main__': t = Thread(target=sayhi,args=('cariee',)) t.start() print('主線程')
方式二:接口
from threading import Thread import time class Sayhi(Thread): # 建立了進程Thread def __init__(self,name): super().__init__() # Thread的__init__方法很重要,經過super()調用 self.name = name def run(self): time.sleep(2) print('%s say hi' % self.name) if __name__ == '__main__': t = Sayhi('cariee') t.start() print('主線程')
多線程和多進程的區別:
1線程的建立開銷小於進程建立的開銷進程
2進程間數據隔離,線程間數據共享
Thread對象的其餘屬性和方法:
.isAlive(): 返回線程是否‘活着’
.getName():返回線程名
.setName():設置線程名
threading模塊提供了一些方法:
threading.currentThread():返回當前的線程變量
threading.enumerate():返回一個包含正在運行的線程的list。正在運行指線程啓動後、結束前,不包括啓動前和終止後的線程
threading.activeCount():返回正在運行的線程數量,與len(threading.enumerate())有相同的結果