Python多執行緒程式設計基礎

2021-08-20 09:49:02 字數 2386 閱讀 3388

多執行緒是並行執行任務的程式設計方法。當然,本質上是非同步的,每個時刻只能用乙個執行緒執行,但巨集觀來看是並行的。多執行緒可以更好地利用計算機資源,提高執行任務的效率,尤其對於i/o密集型應用更是如此。

這是兩個容易混淆的概念。一般來說,程序》執行緒。

程序,又稱重量級程序,是乙個執行中的電腦程式。計算機會為每個程序分配一定的資源。程序可以通過派生新的程序來執行其他任務,程序之間通過程序間通訊的方式共享資訊。

執行緒,又稱輕量級程序,是在同乙個程序下執行的,共享相同的上下文。執行緒包括開始,執行順序,結束三部分。程序交替使用某資源,所以可能因為訪問順序不同導致結果不同,這被稱為競態條件

這裡面涉及到乙個叫做全域性直譯器鎖的概念。簡單來說

所以,全域性直譯器鎖是python多執行緒程式設計的基礎機制。

python中關於多執行緒程式設計的模組有thread,threading,queue等。其中,thread模組不建議使用,因為它不支援守護執行緒(即主線程結束時,所有其他執行緒也都強制結束),並且同步源語很少(下文會提到)。

threading模組是比thread更高階更好用的模組,thread類是threading模組的主要執行物件,下面就來簡單介紹一下它並講解幾個例項。

thread物件方法

描述init()

建構函式,例項化乙個執行緒物件

start()

開始執行該執行緒

run()

定義執行緒功能

join()

直至啟動的執行緒終止之前一直掛起

使用thread類建立執行緒有很多方法,下面只介紹其中一種:建立thread的例項,傳給它乙個函式。

import threading

from time import sleep,ctime

loops = [4,2]

def loop(nloop,nsec):

​ print(『start loop』,nloop,』at:』,ctime())

​ sleep(nsec)

​ print(『finish loop』,nloop,』at:』,ctime())

def main():

​ print(『start threads at:』,ctime())

​ threads =

​ nloops = range(len(loops))

​ for i in nloops:

​ t = threading.thread(target=loop,args=(i,loops[i]))

​ for i in nloops:

​ threads[i].start()

​ for i in nloops:

​ threads[i].join()

​ print(『all done at:』,ctime())

ifname== 『main『:

​ main()

結果:

start threads at: thu may 31 17:28:37 2018

start loop 0 at: thu may 31 17:28:37 2018

start loop 1 at: thu may 31 17:28:37 2018

finish loop 1 at: thu may 31 17:28:39 2018

finish loop 0 at: thu may 31 17:28:41 2018

all done at: thu may 31 17:28:41 2018

多執行緒程式設計乙個非常重要的方面是同步。因為你肯定不希望一些重要資料因為不同步而出錯。

下面就來介紹兩種同步原語:

鎖的作用,顧名思義,就是讓獲得鎖的執行緒能夠完整的執行而不被打斷。

鎖有兩種狀態:鎖定,未鎖定。支援兩個函式:獲得鎖,釋放鎖。

建立乙個鎖物件需要引入lock;獲得鎖—acquire;釋放鎖—release。

訊號量是乙個計數器,資源消耗時遞減,資源釋放時遞增,同樣也使用acquire和release。

至於使用嘛,類似這樣:

lock = lock() #建立乙個鎖物件

lock.acquire() #獲得鎖

code #需要在鎖裡執行的**

lock.release() #釋放鎖

還有queue模組沒寫,因為幾乎沒用到,(好吧,其實是懶)等用到的時候在來補充吧。

新手寫部落格,如有錯誤,還請各位指正,謝謝!

多執行緒程式設計基礎

一直以來,自己都不會多執行緒的程式設計。今天決定好好的補補!一 多執行緒的基本概念 二 多執行緒中的重要函式 1 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthread start...

多執行緒程式設計基礎

值得參考 include int pthread create thread id,attr,func,arg 其中func表示該執行緒需要執行的 位址 從執行緒 處return pthread cancle終止同一程序中的另一線程 呼叫pthread exit來終止自己 設定取消執行緒的狀態和型別...

python 多執行緒程式設計

一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...