Maison  >  Article  >  développement back-end  >  Une brève introduction à l'utilisation des événements sous les threads Python

Une brève introduction à l'utilisation des événements sous les threads Python

不言
不言original
2018-09-11 16:09:141746parcourir

Cet article vous apporte une introduction à l'utilisation des événements sous les threads Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Les événements sont utilisés pour communiquer entre les threads. Un thread envoie un signal [event] et un ou plusieurs autres threads l'attendent.

L'instance Event gère un indicateur interne, qui peut être défini sur True à l'aide de la méthode set(), ou réinitialisé à False à l'aide de la méthode clear(). La méthode wait() se bloquera jusqu'à ce que l'indicateur soit True.

Syntaxe :

e=Event()
创建新的Event实例,并将内部标志设置为False。

Méthodes courantes :

e.is_set():只有当内部标志设为True时才返回True

e.set():将内部标志设置为True。等待它变为True的所有线程都讲被唤醒。

e.clear():将内部标志重置为False。

e.wait(timeout):阻塞直到内部标志为True。如果调用时内部标志为True,此方法将立即返回。
否则,它将阻塞,直到另一个线程调用set()方法将标志设置为True,或者出现可选的超时时。

Remarque

Bien que les objets Event puissent être utilisés pour envoyer des signaux à d'autres threads, ils ne doivent pas l'être utilisé pour implémenter des notifications sur les producteurs et les consommateurs, comme le code suivant :
evt=Event()

def producer():
    while True:
        #生产项
        ...
        evt.signal()
def consumer():
    while True:
        #等待一个项
        evt.wait()
        #消费项
        ...
        #清除事件并再次等待
        evt.clear()

Le code ci-dessus est à éviter autant que possible, car ce code n'est pas fiable, car entre evt.wait() et evt.clear () opérations, le producteur peut avoir produit un nouvel article. Cependant, avec des événements clairs, les consommateurs peuvent ne pas voir un nouvel article tant que le producteur ne l'a pas créé. Dans le meilleur des cas, le programme subira une courte pause et le traitement de l'élément sera inexplicablement retardé. Le pire des cas est que l'ensemble du programme se bloque en raison de la perte du signal d'événement. Pour résoudre ce genre de problème, il est préférable d'utiliser des variables de condition.

Recommandations associées :

Une brève introduction à la programmation multi-thread Python

Explication détaillée du multi-thread Python, verrous et mécanismes d'événements d'événements Utilisez simplement

pour implémenter un pool de threads simple en Python

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