J'ai ce scénario:Python multithreading
Une page Web créée avec Zope/Plone et une mine d'API python. Il y a une page Web, appelez-la "a", qui par une méthode python appelle une base de données (Postgres) et retourne des informations. Sur la page "a", vous pouvez modifier les données de base de données "offline" (j'entends que les modifications ne sont pas écrites dans la base de données instantanément mais dans un second moment quand vous appuyez sur "save" et appelez une API python). Alors, imaginez ce scénario: un utilisateur, appelé "Sam", charge la page et commence à modifier les données. Pendant ce temps, un utilisateur, appelé "Sara", modifie la base de données par la page "a" en cliquant sur "enregistrer". Maintenant, Sam n'a pas les données de la base de données: il va appuyer sur "sauvegarder" et écraser le changement de données de Sara.
Je voudrais avoir une alerte sur ma page en temps réel. Je pensais que je peux faire quelque chose comme ceci:
Faire un appel AJAX, qui n'est pas bloqué, et continuez avec le rendu de page. L'AJAX appelle une méthode python qui crée un thread qui fait une boucle infinie (sur une condition "X"). Lorsque j'écris des données sur la base de données, j'appelle une fonction qui va changer "X condition" en arrêtant le thread et en revenant à AJAX.
De plus, je ne peux pas verrouiller la base de données car je dois donner un accès libre à tous les utilisateurs qui veulent modifier ma base de données.
Mon problème est: comment puis-je identifier un thread python? Je viens de voir que toutes les méthodes d'une classe qui héritent de Thread veulent "self" comme paramètre. De plus, je dois appeler le thread en accédant à la page "a" et cela se trouvera quelque part dans le code (disons sur le "module des threads") mais les inserts sont sur l'autre module. Alors, comment puis-je réaliser mon idée?
Et si quelqu'un a une autre idée, me dire sans aucun problème :)
Votre réponse est bonne mais je veux remarquer que dans un certain sens, quand il a la page "a" ouverte, un autre utilisateur met à jour la base de données. Puis changez les champs d'une manière propoer (sur la "une" page) – DonCallisto
Mis à jour ma réponse, tapait encore les derniers paragraphes quand j'ai eu votre commentaire. – marr75