Bonjour
Je rencontre un problème de portée de variable avec Flask (enfin, je crois, je débute avec cette technologie)
Je m’explique
J’ai deux scripts Python….A et B en mémoire. A est le programme principal, A envoie des informations à B via ZMQ. B est chargé de publier cette information dans une page Webn grace à Flask…
B récupère bien l’information, grâce à un thread
Voici mon code
et voici les logs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 # -*- coding: utf-8 -*- import time,datetime import zmq import logging from logging.handlers import RotatingFileHandler from datetime import datetime from time import sleep from flask import Flask from threading import Thread #--------------------------------------------------------------------- # Variables #--------------------------------------------------------------------- ZMQ_URL="tcp://127.0.0.1" ZMQ_PORT="5690" REP_BASE="/Projets/" REP_LOGS=REP_BASE+"logs/" FICHIER_LOG=REP_LOGS+"projet.log" #MESSAGE="" #Thread qui va surveiller si des messages ont ete recu via ZMQ class Rcv_Message(Thread): def __init__(self,name): Thread.__init__(self,name=name) logging.debug("################## IHM ################## Initialisation du threads de surveillance ZMQ") def run(self): global MESSAGE global sock while True: time.sleep(5) message=sock.recv() logging.debug("**** IHM **** ZMQ ***** Message reçu : %s",message) sous_message =str(message[7:],'utf-8') print (sous_message) if len(sous_message) > 0: MESSAGE=sous_message logging.info("**************** IHM ***********ZMQ ***** Message reçu nettoyé : %s",MESSAGE) ihm=Flask(__name__) # Debut du programme #----------------------------------------------------- # Initialisation du fichier de log #----------------------------------------------------- logging.basicConfig(filename=FICHIER_LOG,level=logging.DEBUG,\ format='%(asctime)s -- %(name)s -- %(levelname)s -- %(message)s') #----------------------------------------------------- # Initialisation ZeroMQ #---------------------------------------------------- context=zmq.Context() sock=context.socket(zmq.SUB) # Definition de la souscription et des messages avec prefix acceptés. sock.setsockopt(zmq.SUBSCRIBE, b'') sock.connect(ZMQ_URL+":"+ZMQ_PORT) @ihm.route('/') def hello_world(): global MESSAGE logging.debug("*** IHM *** ZMQ *** Message reçu ==> %s",MESSAGE) return MESSAGE if __name__ == "__main__": S=Rcv_Message("ZMQ") S.start() ihm.run(host='0.0.0.0', port=8002, debug=True)
Dans @ihm.route, MESSAGE reste vide….comment faire pour afficher cette variable dans une page web….J’aurai pu peut être passer par un fichier flag sur le disque , ou une variable en base de donnée SQLite, mais ZMQ me paraissait une bonne idée, surtout en terme de rapidité d’exécution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 2020-03-25 17:36:35,085 -- root -- DEBUG -- ################## IHM ################## Initialisation du threads de surveillance ZMQ 2020-03-25 17:36:58,126 -- root -- DEBUG -- ========== IHM ============ Message envoyé par ZMQ : TEST 2020-03-25 17:36:58,127 -- root -- DEBUG -- **** IHM **** ZMQ ***** Message reçu : b'TEST' 2020-03-25 17:36:58,127 -- root -- DEBUG -- **** IHM **** ZMQ ***** Message reçu : b'TEST' 2020-03-25 17:37:12,600 -- root -- DEBUG -- *** IHM *** ZMQ *** Message reçu ==> 2020-03-25 17:37:15,789 -- root -- DEBUG -- *** IHM *** ZMQ *** Message reçu ==>
Voyez-vous ce qui ne va pas dans mon code ?
D’avance merci
Olivier
Partager