Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Les ApplicationSession d'Autobahn non "stateless" sont elles "thread-safe" ?

+4 votes

Autobahn/crossbar permet d'écrire des services répondant à des appels concourant assez simplement si on prend garde de bien être "stateless".

Actuellement nous implémentons le "Actor pattern" avec des composants crossbar et nous arrivons inévitablement à la question:

que se passe-t-il exactement si je garde un état interne dans une ApplicationSession, que j'expose un moyen de modifier cet état, et que plusieurs appels concurrents arrivent ?
Les appels sont-ils mis en dans une file d'attente (grâce aux générateurs dans la boucle d'événements) ? Le dernier gagne ?

Si tout ceci n'est pas "thread safe" comment le rendre "thread safe" ? Mettre en file d'attente les appels moi même ? Où pourrais-je trouver de la documentation si on est dans ce cas avec Autobahn/crossbar ?

demandé 12-Jan-2016 par jbjuin (130 points)

1 Réponse

+3 votes
 
Meilleure réponse

Il ne s'agit pas d'être thread safe puisque les worker d'autobahn existent dans des processus séparés.

Mais il s'agit bien de gérer des problématiques de concurrence similaire aux threads.

Autobahn ne fournit rien pour cela.

Selon la tache, il y a plusieurs stratégie :

  • ne pas mettre un état mutable qui peut être modifié depuis l'extérieur.
  • mettre une queue (par exemple en utilisant le module Queue)
  • utiliser un outil externe pour garder la liste des taches (comme redis)
répondu 15-Jan-2016 par Sam (4,978 points)
sélectionné 15-Jan-2016 par jbjuin

En effet, c'est pourquoi j'ai mis des guillements autour de thread-safe.

Le point 1 n'est pas possible c'est au coeur du "Actor pattern": certains de nos composants "suivent" d'autres composants et peuvent modifier leur état interne en fonction de l'environnement, ie, les changements des autres composants.

Du coup le point 2 me parait la voix à suivre.

...