小言_互联网的博客

Python Threading Semaphore信号量(子线程的数量)

332人阅读  评论(0)

原因:主要用在保护有限的资源。
假设当前数据库支持最大连接数为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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场