Maison  >  Article  >  développement back-end  >  Introduction aux sémaphores et sémaphores bornés sous les threads Python

Introduction aux sémaphores et sémaphores bornés sous les threads Python

不言
不言original
2018-09-11 16:28:051014parcourir

Cet article vous présente une introduction aux sémaphores et aux sémaphores limités sous les threads Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Sémaphore et sémaphore borné

Le sémaphore est une primitive de synchronisation basée sur un compteur. Chaque fois que la méthode acquire() est appelée, le compteur est décrémenté de 1, et chaque fois que release() est appelée. ), ce compteur est incrémenté de 1. Si le compteur est 0, la méthode acquire() se bloquera jusqu'à ce qu'un autre thread appelle la méthode release().

Sémaphore

Syntaxe :
s=Semqphore(value)

Créer un nouveau sémaphore. value est la valeur initiale du compteur. Si la valeur est omise, elle sera définie sur 1 par défaut

Méthodes courantes :

s.acquire(blocking) : récupère le sémaphore. Si le compteur interne est supérieur à 0, cette méthode décrémentera sa valeur de 1.
Alors revenez immédiatement. Si sa valeur est 0, cette méthode se bloque jusqu'à ce qu'un autre thread appelle la méthode release().
Le paramètre de blocage se comporte comme décrit pour les objets Lock et RLock.

s.release() : Libère un sémaphore en ajoutant 1 au compteur interne.
Si le compteur est à 0 et qu'un autre thread est en attente, le thread sera réveillé.
Si plusieurs threads sont en attente, un seul peut être renvoyé par son appel acquire() et l'ordre n'est pas défini.

Sémaphore délimité

Syntaxe :
bs=BoundedSemaphore(value)

Crée un nouveau sémaphore délimité. value est la valeur initiale du compteur. Si elle est omise, elle sera par défaut 1.

La différence entre un sémaphore et un sémaphore limité

BoundedSemaphore fonctionne exactement de la même manière que Semaphore, mais release( ) Le nombre d'opérations ne peut pas dépasser le nombre d'opérations acquire().

Différences subtiles entre les sémaphores et les mutex

Les sémaphores peuvent être utilisés pour envoyer des signaux. Par exemple, les méthodes acquire() et release() peuvent être appelées à partir de différents threads pour communiquer entre les threads producteur et consommateur.

Recommandations associées :

Explication détaillée de l'utilisation des sémaphores dans les threads Python3.X

Sémaphore python Qu'est-ce que c'est ? (exemples détaillés)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn