Python Threading Semaphore信號量(子線程的數量)

原因:主要用在保護有限的資源。
假設當前數據庫支持最大連接數爲3,將信號量初始值設爲3,那麼同時最大可以有三個線程連接數據庫,其他線程若再想連接數據庫,則只有等待,直到某一個線程釋放數據庫連接。

注意:輸出結果是每兩秒打印的,跟數據庫連接操作差的遠呢

import logging
import threading
import time
import random
from threading import Semaphore

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [*] %(message)s"
)
threads = []
lock_sm = Semaphore(3)


class connectdb(threading.Thread):
    def run (self):
        while True:
            lock_sm.acquire()
            logging.info(f"{self.name} connecting to db... ")
            logging.info(f"{self.name} released db...")
            time.sleep(2)
            lock_sm.release()

if __name__ == '__main__':
    for i in range(5):
        threads.append(connectdb())
    
    # 從五個線程取出三個
    random_threads = random.sample(threads, 3)
    
    # 阻塞啓動線程---------------------------
    for t in random_threads:
        t.start()
    for t in random_threads:
        t.join()

輸出:

2019-10-02 17:31:38,851 [*] Thread-2 connecting to db... 
2019-10-02 17:31:38,851 [*] Thread-2 released db...
2019-10-02 17:31:38,851 [*] Thread-4 connecting to db... 
2019-10-02 17:31:38,851 [*] Thread-4 released db...
2019-10-02 17:31:38,851 [*] Thread-3 connecting to db... 
2019-10-02 17:31:38,851 [*] Thread-3 released db...
2019-10-02 17:31:40,851 [*] Thread-2 connecting to db... 
2019-10-02 17:31:40,851 [*] Thread-2 released db...
2019-10-02 17:31:40,852 [*] Thread-3 connecting to db... 
2019-10-02 17:31:40,852 [*] Thread-3 released db...
2019-10-02 17:31:40,852 [*] Thread-4 connecting to db... 
2019-10-02 17:31:40,854 [*] Thread-4 released db...
2019-10-02 17:31:42,853 [*] Thread-2 connecting to db... 
2019-10-02 17:31:42,853 [*] Thread-2 released db...
2019-10-02 17:31:42,854 [*] Thread-3 connecting to db... 
2019-10-02 17:31:42,854 [*] Thread-3 released db...
2019-10-02 17:31:42,855 [*] Thread-4 connecting to db... 
2019-10-02 17:31:42,855 [*] Thread-4 released db...
2019-10-02 17:31:44,854 [*] Thread-2 connecting to db... 
2019-10-02 17:31:44,854 [*] Thread-2 released db...
2019-10-02 17:31:44,855 [*] Thread-3 connecting to db... 
2019-10-02 17:31:44,855 [*] Thread-3 released db...
2019-10-02 17:31:44,856 [*] Thread-4 connecting to db... 
2019-10-02 17:31:44,856 [*] Thread-4 released db...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章