溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中并發(fā)、進程、線程的總結(jié)

發(fā)布時間:2020-07-30 22:57:16 來源:網(wǎng)絡(luò) 閱讀:491 作者:121502_hl 欄目:編程語言

并發(fā)

同時做某些事,但是強調(diào),一段時間內(nèi)有事情要處理。


并發(fā)的解決

1:隊列、緩沖區(qū)

使用隊列解決資源使用的問題,先進先出,其實就是一個緩沖區(qū)。

2:爭搶

搶到資源就上鎖,排他性的鎖,其它只能等候。

3:預(yù)處理

提前加載用戶需要的數(shù)據(jù),緩存。

4:并行

通過多開進程、線程實現(xiàn)并行處理,購買更多的服務(wù)器來解決問題。(水平擴展)

5:提速

提高性能,(垂直擴展)

6:消息中間件

常見的消息中間件有RabbitMQ、ActiveMQ、RocketMQ、kafka


進程

計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。


線程

線程有時也被稱為輕量級進程,是程序執(zhí)行流的最小單元。一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成。


進程和線程的關(guān)系

程序是源代碼編譯后的文件,而這些文件存放在磁盤上。當程序被操作系統(tǒng)加載到內(nèi)存中,就是進程,進程中存放著指令和數(shù)據(jù)(資源),它也是線程的容器。


Linux進程有父進程、子進程,windows的進程是平等關(guān)系。


線程的狀態(tài)


就緒(Ready):線程能夠運行,但在等待被調(diào)度??赡芫€程剛剛創(chuàng)建啟動,或者剛剛從阻塞中恢復(fù),或者被其他線程搶占

運行(Running):線程正在運行

阻塞(Blocked) :線程等待外部事件發(fā)生而無法運行,如I/O操作

終止(Terminated):線程完成,或者退出,或被取消



Python中的線程開發(fā)使用標準庫threading

Thread類


參數(shù):

target:線程調(diào)用的對象,就是目標函數(shù)

name:為線程起一個名字

args:為目標函數(shù)傳遞實參,元組

kwargs:為目標函數(shù)關(guān)鍵字傳參,字典



線程的啟動

需要調(diào)用start()方法。


線程的退出

Python沒有提供線程退出的方法,線程在下面情況時退出

1:線程函數(shù)內(nèi)語句執(zhí)行完畢

2:線程函數(shù)中拋出未處理的異常



線程的傳參

本質(zhì)上就是函數(shù)傳參。


threading的屬性和方法

方法:

current_thread():返回當前線程對象

main_thread():返回主線程對象

active_count():當前處于alive狀態(tài)的線程個數(shù)

enumerate():返回所有活著的線程的列表,不包括已經(jīng)終止的線程和未開始的線程

get_ident():返回當前線程的ID,非0整數(shù)


Thread實例的屬性和方法

name:只是一個名字,只是個標識,名稱可以重名。getName(),setName()獲取、設(shè)置這個名詞

ident:線程ID,它時非0整數(shù)。線程啟動后才會有ID,否則為None.線程退出,此ID依舊可以訪問,此ID可以重復(fù)使用。

is_alive():返回線程是否或著


start():啟動線程,每一個線程必須且只能執(zhí)行該方法一次


run():運行線程函數(shù)


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI