J'écris une classe python qui effectue des appels de méthode asynchrones en utilisant D-Bus. Quand mon reply_handler est appelé, il stocke les données dans la liste. Cette liste peut être utilisée par d'autres méthodes de classe en même temps. Est-ce sûr ou je ne peux utiliser que des structures de données synchronisées comme la classe Queue?Sécurité des threads en python utilisant les appels de méthode asynchrones D-Bus
Répondre
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.
- 1. Différence entre les appels asynchrones et les appels io asynchrones en .net
- 2. Gestion des appels asynchrones
- 3. Suivre les appels asynchrones
- 4. Effectuer des appels asynchrones dans une méthode de services RIA
- 5. Appels de méthode asynchrones générés en C# - AOP?
- 6. Threads asynchrones en standard C++
- 7. Sécurité des threads sur ma méthode
- 8. Appels asynchrones avec AjaxPro
- 9. Sécurité des threads des appels U/uCreateSequential et p/invoke en général
- 10. AndroidTestCase - Appels asynchrones
- 11. Silverlight appels asynchrones et des méthodes anonymes
- 12. Apache Camel pour les appels asynchrones
- 13. Mauvaise compréhension des appels asynchrones GWT
- 14. Les appels de fermeture prennent une éternité en utilisant les E/S asynchrones de Cocoa?
- 15. Sécurité des appels AJAX
- 16. Comment détecter les appels wcf asynchrones en attente?
- 17. ASP.NET a enchaîné des appels asynchrones
- 18. python gio en attente des opérations asynchrones
- 19. Appels asynchrones à partir de méthodes déjà exécutées dans le pool de threads
- 20. Appels de procédure stockés asynchrones
- 21. Comment assurer l'ordre des appels d'opération asynchrones?
- 22. Appels asynchrones Flash avec des autorisations de clic de souris?
- 23. Problèmes DBus Python
- 24. Appels asynchrones à Entity Framework
- 25. Comment gérer les résultats des threads python?
- 26. Sécurité des threads dans JSF
- 27. QueryPerformanceCounter et la sécurité des threads
- 28. Plusieurs appels asynchrones pour remplir un objet
- 29. Connexion Dbus via mod_wsgi en python
- 30. Java - Sécurité des threads des constructeurs ArrayList
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