python 多執行緒

2021-10-07 14:12:31 字數 2880 閱讀 5775

程序就是執行著的程式

1)每個程序至少包含乙個執行緒

2)執行緒就是作業系統建立的,用來控制**執行的資料結構

3)執行緒就像**的執行許可證

4)單執行緒程式,主線程的入口就是**的開頭

5)主線程順序往下執行,直到所有的**都執行完

6)執行緒可被搶占

7)在其他執行緒正在執行時,執行緒可以暫時擱置(也稱睡眠)–執行緒的退讓

1)併發:在同一時間,進行同一操作,但是是不同的操作,叫做併發。絕對的併發是不存在的。

2)並行:同時操作同一內容叫做並行。

乙個服務視窗=cpu的乙個核心

客戶=程序(執行著的程式)

排程員=作業系統(os)

服務號=執行緒

排程員分配服務號給客戶 = os分配執行緒給程序**

服務視窗給客戶辦業務=cpu核心執行執行緒**

注意:cpu核心,在單個時間點上只能執行乙個執行緒**

一旦執行緒搶奪資源,cpu核心此時不處理東西

1)作業系統(os)分配cpu核心給程序

2)乙個執行緒不一定占用乙個cpu核心直到結束

a、有中斷時,先讓其他執行緒繼續執行

b、中斷回來後不一定在同乙個cpu核心接著處理

3)作業系統不會讓乙個執行緒一直占用cpu

執行緒庫a、**通過系統呼叫,請求os分配乙個新的執行緒

b、python內

thread(python2使用python3中改為_thread)

threading

這兩個模組都可用來建立和管理執行緒

#在子執行緒結束之前,主線程等待

t1.join()

共享資源子某個時刻獨占性的使用

zhifu_lock = threading.lock() 申請鎖

zhifu_lock.acquire() 加上鎖

zhifu_lock.release() 釋放鎖

1)threading.currentthread(): 返回當前的執行緒變數。

2)threading.enumerate(): 返回乙個包含正在執行的執行緒的list。正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。

3)threading.activecount(): 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果。

除了使用方法外,執行緒模組同樣提供了thread類來處理執行緒,thread類提供了以下方法:

1)run(): 用以表示執行緒活動的方法。

2)start():啟動執行緒活動。

3)join([time]): 等待至執行緒中止。這阻塞呼叫執行緒直至執行緒的join() 方法被呼叫中止-正常退出或者丟擲未處理的異常-或者是可選的超時發生。

4)isalive(): 返回執行緒是否活動的。

5)getname(): 返回執行緒名。

6)setname(): 設定執行緒名。

print

("**************主線程開始**********************"

)#呼叫執行緒模組

import threading

import time

zhifutong =

#申請鎖

zhifu_lock = threading.

lock()

#python操作共享資料,使用多執行緒必須要用鎖,有鎖有開

def zhifu()

:print

("********子執行緒開始*************"

) #加鎖

zhifu_lock.

acquire()

#休眠5秒

time.

sleep(5

)

#獲取當前餘額

zhifutong[username]-=t

print

(f'賬戶餘額為:'

)

#釋放鎖

zhifu_lock.

release()

print

("********子執行緒結束*************"

)def yue

(username,t)

: #加鎖

zhifu_lock.

acquire()

zhifutong[username]+=t

print

(f'賬戶餘額為:'

) #釋放鎖

zhifu_lock.

release()

#兩個引數,乙個指定執行緒的入口函式,乙個是函式的引數

t1 = threading.

thread

(target=zhifu,args=

('kun'

,100))

//函式名不加括號 否則為呼叫函式,args引數為元組形式

t2 = threading.

thread

(target=yue,args=

('kun'

,200))

#啟動執行緒

t1.start()

t2.start()

#join方法,讓主線程等待子執行緒執行結束之後再執行(子執行緒的順序無法規定)

t1.join()

t2.join()

print

("**************主線程結束**********************"

)

子執行緒啟動時,主線程同時進行

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...