了解Python多線程的創(chuàng)建程序
Python多線程在程序設(shè)計(jì)中自由重要的地位,在服務(wù)器deamon程序方面更為重要,但是不論在那種系統(tǒng),Python多線程調(diào)度的開銷比其他要開的很多。如果你想在此方面有更好的了解,你可以瀏覽以下的這篇文章。希望你有所收獲。
Python可以方便地支持多線程??梢钥焖賱?chuàng)建線程、互斥鎖、信號(hào)量等等元素,支持線程讀寫同步互斥。美中不足的是,Python多線程的運(yùn)行在Python虛擬機(jī)上,創(chuàng)建的多線程可能是虛擬的線程,需要由Python虛擬機(jī)來輪詢調(diào)度,這大大降低了Python多線程的可用性。希望高版本的Python可以解決這個(gè)問題,發(fā)揮多CPU的***效率。網(wǎng)上有些朋友說要獲得真正多CPU的好處,有兩種方法:
1.可以創(chuàng)建多個(gè)進(jìn)程而不是線程,進(jìn)程數(shù)和cpu一樣多。
2.使用Jython 或 IronPython,可以得到真正的多線程。
閑話少說,下面看看Python如何建立線程
Python線程創(chuàng)建
需要關(guān)注threading.Thread.join(th)
或者th.join()
如果你可以對(duì)要處理的數(shù)據(jù)進(jìn)
- class Thread( group=None, target=None, name=None, args=(),
kwargs={})
行很好的劃分,而且線程之間無須通信,那么你可以使用:創(chuàng)建=》運(yùn)行=》回收的方式編寫你的Python多線程程序。但是如果線程之間需要訪問共同的對(duì)象,則需要引入互斥鎖或者信號(hào)量對(duì)資源進(jìn)行互斥訪問。
下面講講如何創(chuàng)建互斥鎖創(chuàng)建鎖
***,模擬一個(gè)公交地鐵IC卡繳車費(fèi)的多線程程序,有10個(gè)讀卡器,每個(gè)讀卡器收費(fèi)器每次扣除用戶一塊錢進(jìn)入總賬中,每讀卡器每天一共被刷10000000次。賬戶原有100塊。所以***的總賬應(yīng)該為10000100。先不使用互斥鎖來進(jìn)行鎖定(注釋掉了鎖定代碼),看看后果如何即可。
- g_mutex = threading.Lock()
- ....
- 使用鎖
- for ... :
- #鎖定,從下一句代碼到釋放前互斥訪問
- g_mutex.acquire()
- a_account.deposite(1)
- #釋放
- g_mutex.release()
以上就是對(duì)Python多線程的相關(guān)介紹。
【編輯推薦】