IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

[Flask] portée de varialble [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mars 2020
    Messages : 15
    Par défaut [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 : 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

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par bong101 Voir le message
    Voyez-vous ce qui ne va pas dans mon code ?
    Vous supposez que le contexte de la requête est l'espace global du module dans lequel elle est définie. Vous avez tout un chapitre de la documentation de Flask qui raconte que ce n'est pas le cas (et indique des solutions).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mars 2020
    Messages : 15
    Par défaut
    Merci W pour la reponse...

    Alors jai ete regardé le lien fourni dans la reponse...en fait, assez logiquement, j'étais deja tombé dessus ...et je n'ai rien compris...
    J'ai ensuite fais une recherche et je suis tombé la-dessus ==>

    J'ai compris qu'a chaque fois que j'appelle ma page avec mon navigateur, le contexte change et que ma variable est vide....

    comment faire dans mon cas de la persistance ?

    merci encore

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par bong101 Voir le message
    comment faire dans mon cas de la persistance ?
    La "persistance", c'est stoker des données à l'extérieur de l'application/process histoire de pouvoir les récupérer même après un crash. Ca se réalise avec un fichier, une base de données,...

    Citation Envoyé par bong101 Voir le message
    Alors jai ete regardé le lien fourni dans la reponse...en fait, assez logiquement, j'étais deja tombé dessus ...et je n'ai rien compris...
    Pour comprendre, il faut écrire/faire marcher un petit exemple où la requête retourne (par exemple) la valeur d'un compteur incrémenté à chaque requête (ou toutes les secondes si vous voulez utiliser un thread).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mars 2020
    Messages : 15
    Par défaut
    Bon, bah, je suis passé par l intermédiaire d'un fichier Json....

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ports USB
    Par MAIROT dans le forum Composants VCL
    Réponses: 8
    Dernier message: 23/09/2002, 20h07
  2. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  3. Port parallele
    Par Phoneus dans le forum C
    Réponses: 2
    Dernier message: 05/05/2002, 23h19
  4. [Kylix] Kylix port //
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 01/04/2002, 12h30
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo