Python線程鎖如何完成模塊建設(shè)
Python線程鎖需要我們不斷的學(xué)習(xí)相關(guān)技術(shù),其實(shí)在有些時(shí)候我們?cè)诓粩嗟膶W(xué)習(xí)中也能尋找出問(wèn)題解決的方案。多線程是程序設(shè)計(jì)中的一個(gè)重要方面,尤其是在服務(wù)器Deamon程序方面。無(wú)論何種系統(tǒng),線程調(diào)度的開(kāi)銷(xiāo)都比傳統(tǒng)的進(jìn)程要快得多。
Python可以方便地支持多線程。可以快速創(chuàng)建線程、互斥鎖、信號(hào)量等等元素,支持線程讀寫(xiě)同步互斥。美中不足的是,Python的運(yùn)行在Python虛擬機(jī)上,創(chuàng)建的多線程可能是虛擬的線程,需要由Python虛擬機(jī)來(lái)輪詢調(diào)度,這大大降低了Python多線程的可用性。希望高版本的Python可以解決這個(gè)問(wèn)題,發(fā)揮多CPU的***效率。
網(wǎng)上有些朋友說(shuō)要獲得真正多CPU的好處,有兩種方法:
1.可以創(chuàng)建多個(gè)進(jìn)程而不是線程,進(jìn)程數(shù)和cpu一樣多。
2.使用Jython 或 IronPython,可以得到真正的多線程。
Python線程鎖創(chuàng)建
使用threading模塊的 Thread類(lèi),類(lèi)接口如下
- class Thread( group=None, target=None, name=None,
args=(), kwargs={})
需要關(guān)注的參數(shù)是target和args. target 是需要子線程運(yùn)行的目標(biāo)函數(shù),args是函數(shù)的參數(shù),以tuple的形式傳遞。
以下代碼創(chuàng)建一個(gè)指向函數(shù)worker 的子線程
- def worker(a_tid,a_account):
- ...
- th = threading.Thread(target=worker,args=(i,acc) ) ;
啟動(dòng)Python線程鎖
- th.start()
等待線程返回threading.Thread.join(th)或者th.join()
如果你可以對(duì)要處理的數(shù)據(jù)進(jìn)行很好的劃分,而且線程之間無(wú)須通信,那么你可以使用:創(chuàng)建=》運(yùn)行=》回收的方式編寫(xiě)你的多線程程序。但是如果線程之間需要訪問(wèn)共同的對(duì)象,則需要引入互斥鎖或者信號(hào)量對(duì)資源進(jìn)行互斥訪問(wèn)。
下面講講如何創(chuàng)建互斥鎖,創(chuàng)建鎖
- g_mutex = threading.Lock()
- ....
使用Python線程鎖
- for ... :
- #鎖定,從下一句代碼到釋放前互斥訪問(wèn)
- g_mutex.acquire()
- a_account.deposite(1)
- #釋放
- g_mutex.release()
以上就是對(duì)Python線程鎖的系統(tǒng)介紹希望大家有所收獲。
【編輯推薦】