您好,登錄后才能下訂單哦!
python線程中的semaphore信號量介紹?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
python中的線程之semaphore信號量
semaphore是一個內(nèi)置的計數(shù)器,每當調(diào)用acquire()時,內(nèi)置計數(shù)器-1;每當調(diào)用release()時,內(nèi)置計數(shù)器+1。
計數(shù)器不能小于0,當計數(shù)器為0時,acquire()將阻塞線程直到其他線程調(diào)用release()。
來看下面的代碼:
import time import threading def foo(): time.sleep(2) #程序休息2秒 print("ok",time.ctime()) for i in range(20): t1=threading.Thread(target=foo,args=()) #實例化一個線程 t1.start() #啟動線程
執(zhí)行結(jié)果:
ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017 ok Tue Jul 18 20:05:58 2017
可以看到,程序會在很短的時間內(nèi)生成20個線程來打印一句話。
如果在主機執(zhí)行IO密集型任務的時候再執(zhí)行這種類型的程序時,計算機就有很大可能會宕機。
這時候就可以為這段程序添加一個計數(shù)器功能,來限制一個時間點內(nèi)的線程數(shù)量。
代碼如下:
import time import threading s1=threading.Semaphore(5) #添加一個計數(shù)器 def foo(): s1.acquire() #計數(shù)器獲得鎖 time.sleep(2) #程序休眠2秒 print("ok",time.ctime()) s1.release() #計數(shù)器釋放鎖 for i in range(20): t1=threading.Thread(target=foo,args=()) #創(chuàng)建線程 t1.start() #啟動線程
執(zhí)行結(jié)果:
ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:38 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:40 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:42 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017 ok Tue Jul 18 20:04:44 2017
看完上述內(nèi)容,你們掌握python線程中的semaphore信號量介紹的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。