2010-06-15 4 views

Répondre

0

Si vous ne modifiez pas la liste en dehors du contexte de rappel, vous n'avez pas forcément besoin de synchronisation - vous devez simplement savoir que l'état de l'objet liste est volatile.

Si la liste doit être modifiée à la fois dans le gestionnaire de rappels ainsi que, disons, dans le contexte d'exécution principal (ou d'autres threads, etc.), alors oui vous aurez besoin de synchronisation.

Le Python synchronisé Queue fonctionne naturellement pour les pompes de messages - vous permettant d'effectuer des actions de manière séquentielle dans l'ordre où les événements viennent dans l'un de vos propres contextes. Cela facilite la simplicité et la lisibilité du code, car les changements d'état majeurs sont plus faciles à suivre. Les rappels ne devraient généralement pas être trop compliqués de toute façon, car le contexte extérieur dans lequel les rappels sont appelés ne devrait pas (et ne doit probablement pas) traiter des exceptions levées à partir de votre code. Il y a aussi des considérations de synchronisation potentielles - le rappel bloquera le contexte de l'émetteur asynchrone - donc garder le gestionnaire court et doux est également bon.

+0

Merci. Dans mon cas, modifier la liste à l'extérieur est habituel. J'ai donc décidé de stocker uniquement les données entrantes dans reply_handler en utilisant Queue. Le cycle principal du programme vérifie périodiquement cette file d'attente et ajoute son contenu en toute sécurité à la liste. – chatbot

Questions connexes