程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 限制資源並發訪問的數量

編輯:Python

我們使用多線程訪問一個資源,但有時候需要限制總數。例如連接池,支持同時連接,但數目是固定的。這些連接可以使用Semaphore來管理。
我們假設這樣一個場景:
一個餐館,只能允許指定數量的人同時用餐,超出的人要等待其他人用餐完畢才能用餐。
代碼示例:

import logging
import random
import time
from threading import Thread, Semaphore
logging.basicConfig(level=logging.DEBUG, format='%(threadName)s-%(asctime)s-%(message)s')
class Restaurant:
def __init__(self, seat_count):
self.seat_count = seat_count # 餐比特數量
def eating(self):
logging.debug("用餐中。。。")
time.sleep(random.randint(2, 5)) # 用餐時間隨機2~5秒
logging.debug("用餐完成")
def eating(s: Semaphore, r: Restaurant):
with s:
r.eating()
if __name__ == '__main__':
r = Restaurant(5) # 最多5人同時用餐
s = Semaphore(r.seat_count) # 限制同時吃飯的人數量為餐比特數量
for i in range(10): # 10個人需要用餐
t = Thread(target=eating, name=f'顧客{
i}', args=(s, r))
t.start()

結果:

顧客0-2022-06-27 14:45:30,778-用餐中。。。
顧客1-2022-06-27 14:45:30,779-用餐中。。。
顧客2-2022-06-27 14:45:30,779-用餐中。。。
顧客3-2022-06-27 14:45:30,780-用餐中。。。
顧客4-2022-06-27 14:45:30,780-用餐中。。。
顧客2-2022-06-27 14:45:33,780-用餐完成
顧客5-2022-06-27 14:45:33,780-用餐中。。。
顧客1-2022-06-27 14:45:34,789-用餐完成
顧客4-2022-06-27 14:45:34,789-用餐完成
顧客6-2022-06-27 14:45:34,789-用餐中。。。
顧客7-2022-06-27 14:45:34,789-用餐中。。。
顧客3-2022-06-27 14:45:35,786-用餐完成
顧客0-2022-06-27 14:45:35,786-用餐完成
顧客8-2022-06-27 14:45:35,787-用餐中。。。
顧客9-2022-06-27 14:45:35,787-用餐中。。。
顧客6-2022-06-27 14:45:37,793-用餐完成
顧客5-2022-06-27 14:45:38,782-用餐完成
顧客8-2022-06-27 14:45:39,788-用餐完成
顧客7-2022-06-27 14:45:39,803-用餐完成
顧客9-2022-06-27 14:45:40,799-用餐完成

通過結果,我們可以看到,最多會有5個人同時用餐,有人用餐完成後,馬上會有新的顧客用餐,滿足我們的場景要求。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved