一、線程講解 1.多線程類似于同時(shí)執(zhí)行多個(gè)不同程序,,多線程運(yùn)行有如下優(yōu)點(diǎn):
線程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的,。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口,。但是線程不能夠獨(dú)立執(zhí)行,,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制,。 每個(gè)線程都有他自己的一組CPU寄存器,,稱為線程的上下文,該上下文反映了線程上次運(yùn)行該線程的CPU寄存器的狀態(tài),。 指令指針和堆棧指針寄存器是線程上下文中兩個(gè)最重要的寄存器,,線程總是在進(jìn)程的上下文中運(yùn)行的,,這些地址都用于標(biāo)志擁有線程的進(jìn)程地址空間中的內(nèi)存。 線程可以被搶占(中斷),。 在其他線程正在運(yùn)行時(shí),,線程可以暫時(shí)擱置(也稱為睡眠) – 這就是線程的退讓。 2.線程可以分為:
3. Python3 線程中常用的兩個(gè)模塊為:
thread 模塊已被廢棄。用戶可以使用 threading 模塊代替,。所以,,在 Python3 中不能再使用”thread” 模塊。為了兼容性,,Python3 將 thread 重命名為 “_thread”,。 thread 模塊已被廢棄。用戶可以使用 threading 模塊代替,。所以,,在 Python3 中不能再使用'thread' 模塊,。為了兼容性,,Python3 將 thread 重命名為 '_thread'。 實(shí)例: 執(zhí)行以上程序輸出結(jié)果如下: 使用 threading 模塊創(chuàng)建線程 我們可以通過(guò)直接從 threading.Thread 繼承創(chuàng)建一個(gè)新的子類,,并實(shí)例化后調(diào)用 start() 方法啟動(dòng)新線程,,即它調(diào)用了線程的 run() 方法: 以上程序執(zhí)行結(jié)果如下: 線程同步 如果多個(gè)線程共同對(duì)某個(gè)數(shù)據(jù)修改,,則可能出現(xiàn)不可預(yù)料的結(jié)果,為了保證數(shù)據(jù)的正確性,,需要對(duì)多個(gè)線程進(jìn)行同步,。 使用 Thread 對(duì)象的 Lock 和 Rlock 可以實(shí)現(xiàn)簡(jiǎn)單的線程同步,這兩個(gè)對(duì)象都有 acquire 方法和 release 方法,,對(duì)于那些需要每次只允許一個(gè)線程操作的數(shù)據(jù),,可以將其操作放到 acquire 和 release 方法之間。如下: 多線程的優(yōu)勢(shì)在于可以同時(shí)運(yùn)行多個(gè)任務(wù)(至少感覺起來(lái)是這樣),。但是當(dāng)線程需要共享數(shù)據(jù)時(shí),,可能存在數(shù)據(jù)不同步的問(wèn)題。 實(shí)例: |
|
來(lái)自: flyk0tcfb46p9f > 《AI》