多線程

1.什么是進(jìn)程

一個(gè)正在運(yùn)行的應(yīng)用程序就是一個(gè)進(jìn)程.系統(tǒng)會(huì)給每一個(gè)進(jìn)程分配一個(gè)獨(dú)立的內(nèi)存區(qū)域,用來保存程序運(yùn)行過程中產(chǎn)生的數(shù)據(jù),當(dāng)進(jìn)程結(jié)束的時(shí)候,這個(gè)內(nèi)存區(qū)域會(huì)自動(dòng)銷毀

2.什么是線程

進(jìn)程想要執(zhí)行任務(wù),就必須要有線程.每個(gè)進(jìn)程都默認(rèn)有一個(gè)線程,這個(gè)線程叫主線程;其他的線程叫子線程,程序都是默認(rèn)在主線程中執(zhí)行的
一個(gè)線程中執(zhí)行多個(gè)任務(wù),任務(wù)是串行執(zhí)行的(一個(gè)一個(gè)地執(zhí)行)
一個(gè)進(jìn)程中如果有多個(gè)線程,多線程執(zhí)行不同任務(wù)的時(shí)候是并行(同時(shí)執(zhí)行)

3.python中怎么使用多線程

python通過內(nèi)置的threading模塊來提供多線程相關(guān)技術(shù);
其中有一個(gè)Thread類,這個(gè)類的對(duì)象就是線程對(duì)象


創(chuàng)建線程的方法

1.直接創(chuàng)建線程類的對(duì)象
語法:
線程對(duì)象 = Thread(target=函數(shù),args =參數(shù)) - 創(chuàng)建一個(gè)線程對(duì)象,并且返回
說明:
函數(shù) - function類型的變量;這個(gè)函數(shù)的函數(shù)體會(huì)在子線程中執(zhí)行
參數(shù) - 元組;參數(shù)會(huì)給target對(duì)應(yīng)的函數(shù)(單個(gè)元組用括號(hào)括起來,還要有逗號(hào))
讓子線程開始執(zhí)行任務(wù)
線程對(duì)象.start() - 開始執(zhí)行子線程中的任務(wù)
補(bǔ)充:某個(gè)線程出現(xiàn)異常,是線程直接結(jié)束;進(jìn)程不一定結(jié)束,所有的線程結(jié)束,進(jìn)程才會(huì)結(jié)束


2.創(chuàng)建線程子類

    1. 聲明一個(gè)類繼承自Thread
    1. 重寫run方法,這個(gè)方法中的任務(wù)就是需要在子線程中執(zhí)行的任務(wù)
    1. 創(chuàng)建當(dāng)前類的對(duì)象,就是線程對(duì)象
    1. 啟動(dòng)子線程
class DownloadThread(Thread):
    def __init__(self, film):
        super().__init__()
        self.film = film

    def run(self):
        print('%s開始下載...' % self.film)
        time1 = randint(3, 10)
        time.sleep(time1)
        print('%s下載結(jié)束,總耗時(shí)%d秒' % (self.film, time1))

創(chuàng)建線程對(duì)象

t1 = DownloadThread('霸王別姬')
t2 = DownloadThread('海賊王')

線程對(duì)象 = 類名(參數(shù)) - 類名是自己定義的繼承了Thread類的這個(gè)類的名字,參數(shù)是類的對(duì)象屬性,所以需要傳參
啟動(dòng)線程

  • 線程對(duì)象調(diào)用start會(huì)自動(dòng)在子線程中取調(diào)用run方法
  • 直接用線程對(duì)象調(diào)用run方法,run方法會(huì)在主線程中執(zhí)行
start = time.time()   # 此時(shí)的時(shí)間
t1.start()
t2.start()
# 在子線程t1和t2中執(zhí)行的
# 如果t1.run(),那么run方法會(huì)在主線程中執(zhí)行

補(bǔ)充:join的用法
線程對(duì)象.join() -- 程序執(zhí)行到這個(gè)地方會(huì)停下來(線程阻塞),直到線程對(duì)象中的任務(wù)執(zhí)行完后才執(zhí)行后面的語句

t1.join()
t2.join()
# print('t1結(jié)束')
end = time.time()  #此時(shí)的時(shí)間
print('總時(shí)間: ', end - start)  # 總時(shí)間 = 結(jié)束時(shí)間減去開始時(shí)間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對(duì)應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    勝浩_ae28閱讀 5,257評(píng)論 0 23
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,108評(píng)論 1 18
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,599評(píng)論 1 15
  • ??一個(gè)任務(wù)通常就是一個(gè)程序,每個(gè)運(yùn)行中的程序就是一個(gè)進(jìn)程。當(dāng)一個(gè)程序運(yùn)行時(shí),內(nèi)部可能包含了多個(gè)順序執(zhí)行流,每個(gè)順...
    OmaiMoon閱讀 1,804評(píng)論 0 12
  • 讀書過程中,我們總會(huì)使用很多的公式,像二元一次方程之類的,用公式的話會(huì)使得我們的計(jì)算變的簡(jiǎn)單。 在計(jì)算機(jī)中,Jav...
    App0ll0閱讀 1,031評(píng)論 0 1

友情鏈接更多精彩內(nèi)容