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