原因:主要用在保护有限的资源。
假设当前数据库支持最大连接数为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...
转载:https://blog.csdn.net/mixintu/article/details/101927835
查看评论