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

Python limite le nombre daccès simultanés aux ressources

編輯:Python

Nous utilisons plusieurs Threads pour accéder à une ressource,Mais parfois, il faut limiter le total.Par exemple, le pool de connexion,Prise en charge des connexions simultanées,Mais le nombre est fixe.Ces connexions peuvent être utiliséesSemaphorePour gérer.
Supposons qu'un tel scénario:
Un restaurant,Seuls un nombre déterminé de personnes peuvent manger en même temps,Ceux qui sont au - delà doivent attendre que les autres aient fini de manger avant de manger.
Exemple de code:

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 # Nombre de places
def eating(self):
logging.debug("Pendant le repas...")
time.sleep(random.randint(2, 5)) # Les repas sont aléatoires2~5Secondes
logging.debug("Dîner terminé")
def eating(s: Semaphore, r: Restaurant):
with s:
r.eating()
if __name__ == '__main__':
r = Restaurant(5) # La plupart5Les gens mangent en même temps
s = Semaphore(r.seat_count) # Limiter le nombre de personnes qui mangent en même temps au nombre de places 
for i in range(10): # 10 Besoin personnel de repas 
t = Thread(target=eating, name=f'Clients{
i}', args=(s, r))
t.start()

Résultats:

Clients0-2022-06-27 14:45:30,778-Pendant le repas...
Clients1-2022-06-27 14:45:30,779-Pendant le repas...
Clients2-2022-06-27 14:45:30,779-Pendant le repas...
Clients3-2022-06-27 14:45:30,780-Pendant le repas...
Clients4-2022-06-27 14:45:30,780-Pendant le repas...
Clients2-2022-06-27 14:45:33,780-Dîner terminé
Clients5-2022-06-27 14:45:33,780-Pendant le repas...
Clients1-2022-06-27 14:45:34,789-Dîner terminé
Clients4-2022-06-27 14:45:34,789-Dîner terminé
Clients6-2022-06-27 14:45:34,789-Pendant le repas...
Clients7-2022-06-27 14:45:34,789-Pendant le repas...
Clients3-2022-06-27 14:45:35,786-Dîner terminé
Clients0-2022-06-27 14:45:35,786-Dîner terminé
Clients8-2022-06-27 14:45:35,787-Pendant le repas...
Clients9-2022-06-27 14:45:35,787-Pendant le repas...
Clients6-2022-06-27 14:45:37,793-Dîner terminé
Clients5-2022-06-27 14:45:38,782-Dîner terminé
Clients8-2022-06-27 14:45:39,788-Dîner terminé
Clients7-2022-06-27 14:45:39,803-Dîner terminé
Clients9-2022-06-27 14:45:40,799-Dîner terminé

Grâce aux résultats,Nous pouvons voir,Tout au plus.5 Repas individuels simultanés , Quand quelqu'un aura fini son repas , Il y aura bientôt de nouveaux clients , Répondre aux exigences de notre scénario .


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