第一章 1.20 多線程基礎

一個應用程序在運行時就是一個進程,一個進程默認只有一個主線程,也能夠有多個進程,同時執行不一樣的任務;本次課程主要是實現如何讓進程能夠進行多線程工做python

一個進程就像一個工廠,多個進程就像工廠例的工人,每一個工人之間的工做相互之間不影響多線程

讓一個進程多線程工做有兩種實現方式:
①.直接導入treading模塊種的Tread類並建立子線程對象
②.導入treading模塊種的Tread類,建立一個Tread的子類,並用這個子類建立子線程對象函數

一. 在進程種建立Tread類的對象

1. 建立線程對象 - 子線程

線程對象 = Thread(target=函數, args=元組)
說明:
target - 函數,須要在子線程中執行的任務(會在子線程中調用)
args - target對應的函數在調用的時候傳的參數線程

2. 讓子線程執行子線程中的任務

線程對象.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()

二. 在進程種建立Tread類的子類的對象

仍是下載電影的例子:繼承

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

相關文章
相關標籤/搜索