一個應用程序在運行時就是一個進程,一個進程默認只有一個主線程,也能夠有多個進程,同時執行不一樣的任務;本次課程主要是實現如何讓進程能夠進行多線程工做python
一個進程就像一個工廠,多個進程就像工廠例的工人,每一個工人之間的工做相互之間不影響多線程
讓一個進程多線程工做有兩種實現方式:
①.直接導入treading模塊種的Tread類並建立子線程對象
②.導入treading模塊種的Tread類,建立一個Tread的子類,並用這個子類建立子線程對象函數
線程對象 = Thread(target=函數, args=元組)
說明:
target - 函數,須要在子線程中執行的任務(會在子線程中調用)
args - target對應的函數在調用的時候傳的參數線程
線程對象.start()
在子線程中調用target對用的函數,而且將args中的元素做爲參數code
好比在一個進程中模擬下載電影:對象
from treading import Tread from datetime import datetime import time def download(self, movie_name) print('%s開始下載了,開始時間是%s' % (movie_name, datetime.time())) time.sleep(5) print('%s下載完成了,完成時間是%s' % (movie_name, datetime.time())) # 建立線程對象 - 子線程 t1 = Tread(target=download, args=('暮光之城')) t2 = Tread(target=download, args=('兩隻老虎')) t3 = Tread(target=download, args=('臥虎藏龍')) # 讓子線程執行子線程中的任務 t1.start() t2.start() t3.start()
仍是下載電影的例子:繼承
from treading import Tread from datetime import datetime import time class DownloadTread(Tread): # 建立Tread的子類 def __init__(self, mvoie_name) # 建立子類的對象屬性 super().__init__() # 繼承父類的屬性 self.movie_name = movie_name # run方法是在子線程中自動調用的,除了self以外不能有其餘的參數 def run(self) -> None: print('%s開始下載,開始時間是:%s' % (self.movie_name, datetime.now())) time.sleep(5) print('%s下載結束,結束時間是:%s' % (self.movie_name, datetime.now())) t1 = DownloadTead('暮光之城') t2 = DownloadTead('兩隻老虎') t3 = DownloadTead('臥虎藏龍') t1.start t3.start t2.start
join的用法
線程對象.join()
其餘代碼進程
這兒的其餘代碼會在線程對象中的任務執行完後才執行get