一、允許一個資源最多由幾個線程同時進行 命令行:threading.Semaphore(個數) 代表現在最多有幾個線程可以進行操作 二、Timer講解 格式:threading.Timer(時間間隔,函數) 代表這個函數在“時間間隔”的時間之後啟動 三、可重入鎖 1.一個鎖可以被一個線程多次申請 2 ...
一、允許一個資源最多由幾個線程同時進行
命令行:threading.Semaphore(個數)
代表現在最多有幾個線程可以進行操作
import threading import time #參數定義了最多幾個線程可以使用資源 semaphore = threading.Semaphore(3)#這裡就是指最多有三個線程可以進行操作 def func(): if semaphore.acquire(): for i in range(2): print(threading.current_thread().getName() + "get semapore") time.sleep(5) semaphore.release() print(threading.current_thread().getName() + "release semaphore") for i in range(8): t1 = threading.Thread(target=func,args=()) t1.start()
二、Timer講解
格式:threading.Timer(時間間隔,函數)
代表這個函數在“時間間隔”的時間之後啟動
def func2(): print("I am running.....") time.sleep(3) print("I an done.......") if __name__ == "__main__": t2 = threading.Timer(6,func2) #代表6秒之後開始啟動線程func2 t2.start() i = 0 while True: print("{0}*********".format(i)) time.sleep(3) i += 1
三、可重入鎖
1.一個鎖可以被一個線程多次申請
2.主要解決遞歸調用的時候哦,需要申請鎖的情況,可以防止被鎖住,重新申請
class MyThread(threading.Thread): def run(self): global num time.sleep(1) if mutex.acquire(1): num = num+1 msg = self.name + " set num to "+str(num) print(msg) mutex.acquire() mutex.release() mutex.release() def test(): for i in range(5): t3 = MyThread() t3.start() if __name__ == "__main__": num = 0 mutex = threading.RLock()#可重入鎖 test()
解釋:我們的線程可以直接進行,不會因為一個申請了,就會被阻塞,依然還可以申請這把鎖
四、源碼
d25_4_Rlock.py
https://github.com/ruigege66/Python_learning/blob/master/d25_4_Rlock.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,後臺回覆”禮包“,獲取大數據學習資料