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
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)
et voici les logs
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 ==>
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

Voyez-vous ce qui ne va pas dans mon code ?
D’avance merci
Olivier