程序就是執行著的程式
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()
共享資源子某個時刻獨占性的使用
1)zhifu_lock = threading.lock() 申請鎖
zhifu_lock.acquire() 加上鎖
zhifu_lock.release() 釋放鎖
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()
: 設定執行緒名。
子執行緒啟動時,主線程同時進行("**************主線程開始**********************"
)#呼叫執行緒模組
import threading
import time
zhifutong =
#申請鎖
zhifu_lock = threading.
lock()
#python操作共享資料,使用多執行緒必須要用鎖,有鎖有開
def zhifu()
("********子執行緒開始*************"
) #加鎖
zhifu_lock.
acquire()
#休眠5秒
time.
sleep(5
)
#獲取當前餘額
zhifutong[username]-=t
(f'賬戶餘額為:'
)
#釋放鎖
zhifu_lock.
release()
("********子執行緒結束*************"
)def yue
(username,t)
: #加鎖
zhifu_lock.
acquire()
zhifutong[username]+=t
(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()
("**************主線程結束**********************"
)
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...