python中的线程之semaphore信号量
生活随笔
收集整理的這篇文章主要介紹了
python中的线程之semaphore信号量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
semaphore是一個內置的計數器
每當調用acquire()時,內置計數器-1 每當調用release()時,內置計數器+1計數器不能小于0,當計數器為0時,acquire()將阻塞線程直到其他線程調用release()。
來看下面的代碼:
執行結果:
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可以看到,程序會在很短的時間內生成20個線程來打印一句話。
如果在主機執行IO密集型任務的時候再執行這種類型的程序時,計算機就有很大可能會宕機。
這時候就可以為這段程序添加一個計數器功能,來限制一個時間點內的線程數量。
代碼如下:
import time import threadings1=threading.Semaphore(5) #添加一個計數器def foo():s1.acquire() #計數器獲得鎖time.sleep(2) #程序休眠2秒print("ok",time.ctime())s1.release() #計數器釋放鎖for i in range(20):t1=threading.Thread(target=foo,args=()) #創建線程t1.start() #啟動線程執行結果:
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總結
以上是生活随笔為你收集整理的python中的线程之semaphore信号量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到自己被公安局抓走怎么回事
- 下一篇: Django运维后台的搭建之四:用boo