[Flask] portée de varialble
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:
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:
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