Python多線程編程之多線程加鎖操作示例
本文實(shí)例講述了Python多線程編程之多線程加鎖操作。分享給大家供大家參考,具體如下:
Python語(yǔ)言本身是支持多線程的,不像PHP語(yǔ)言。
下面的例子是多個(gè)線程做同一批任務(wù),任務(wù)總是有task_num個(gè),每次線程做一個(gè)任務(wù)(print),做完后繼續(xù)取任務(wù),直到所有任務(wù)完成為止。
# -*- coding:utf-8 -*- #! python2 import threading start_task = 0 task_num = 10000 mu = threading.Lock() ###通過(guò)工廠方法獲取一個(gè)新的鎖對(duì)象 class MyThread(threading.Thread): ###類MyThread繼承基類threading.Thread def run(self): ##線程啟動(dòng)的入口函數(shù),子類需重寫 global start_task global mu global start_task while start_task < task_num: ##如果任務(wù)沒(méi)有完成,則繼續(xù) if mu.acquire(): ##加鎖 if start_task < task_num: print start_task start_task = start_task + 1 mu.release() ##釋放鎖 def test(): thread_all = [] for i in range(6): ##for循環(huán)創(chuàng)建6個(gè)線程 t = MyThread() ##創(chuàng)建線程 thread_all.append(t) t.start() ###啟動(dòng)線程 for i in range(6): thread_all[i].join() ##等待線程結(jié)束 if __name__ == "__main__": test()
運(yùn)行上述代碼,則輸出1~9999
測(cè)試加鎖與不加鎖效果:將任務(wù)數(shù)設(shè)置為1千萬(wàn)或者以上,在多核機(jī)器上將print輸出分別保存,就能說(shuō)明問(wèn)題。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進(jìn)程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫(kù)程序設(shè)計(jì)入門教程》及《Python常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python模擬登陸,用session維持回話的實(shí)例
今天小編就為大家分享一篇python模擬登陸,用session維持回話的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12在pandas中一次性刪除dataframe的多個(gè)列方法
下面小編就為大家分享一篇在pandas中一次性刪除dataframe的多個(gè)列方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python利用psutil獲取CPU與內(nèi)存等硬件信息
psutil是Python的一個(gè)第三方庫(kù),提供了各種強(qiáng)大的硬件信息查閱功能,這篇文章主要為大家介紹了如何利用psutil獲取CPU與內(nèi)存等硬件信息,需要的可以參考一下2023-07-07python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解
這篇文章主要介紹了python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解,涉及python讀,寫excel—xlwt常用功能,xlutils 常用功能,xlwt寫Excel時(shí)公式的應(yīng)用等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11