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 :

Bottle et lancement appli en double


Sujet :

Réseau/Web Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 117
    Points : 33
    Points
    33
    Par défaut Bottle et lancement appli en double
    Bonjour,

    Je développe pKNyX, un framework pour piloter/étendre une installation domotique basée sur le bus KNX : http://www.pknyx.org

    Actuellement, lorsqu'on lance le framework, tout se passe dans des threads, et le thread principal est une simple boucle avec un sleep. Je suis en train de modifier ça pour que l'utilisateur qui implémente son Device puisse lancer sa propre boucle pour faire des choses plus pertinentes.

    Par exemple, je suis en train d'écrire un mode d'extension pour pKNyX qui va agir en tant que serveur web pour une appli web orientée mobiles/tablettes.

    Du coup, dans la méthode mainLoop() du Device, qui par défaut fait juste un while/sleep, j'ai mis :

    Ça marche, le serveur se lance, mais tout mon bastringue est instancié 2 fois !!! Et je n'arrive pas à comprendre ce qui se passe... Que fait donc cette fameuse fonction run() qui pourrait conduire à ça ?

    Merci d'avance pour vos lumières

    Frédéric

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 117
    Points : 33
    Points
    33
    Par défaut
    Bon, j'ai trouvé : c'est l'option reload=True qui donne ce comportement !

    Pourquoi ça ? En principe, il recharge le code si le fichier est modifié, ce qui n'est pas le cas ici...

    Une idée ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    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 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par fma38 Voir le message
    Pourquoi ça ? En principe, il recharge le code si le fichier est modifié, ce qui n'est pas le cas ici...
    Pour réaliser cela, le .run crée un process fils qui relance le code from scratch. S'il le .run est dans un module, il sera appelé 2 fois (sauf à tester dans quel cas de figure on est qui doit être dans os.environ["CHILD"]).
    Ceci dit, cette fonctionnalité (reload=True) sert surtout au developpement: le code change souvent çà peut être galère d'arrêter et relancer à chaque fois. En production, le code n'est pas supposé changer à la volée.

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

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 117
    Points : 33
    Points
    33
    Par défaut
    Justement, j'utilise pas mal cette feature lors du développement de mon mini serveur web (REST), et j'aimerais bien continuer à l'utiliser via mon Device.

    Du coup, comment faut-il tester le cas de figure avec le os.environ["CHILD"] ? À quel endroit faire ce test ? Dans Bottle ? Ça ne me pose pas de problème d'aller modifier son code (en plus, il s'agit d'un unique module, que je peux intégrer dans mon package pour le moment)..

    Merci pour l'explication, en tout cas !

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    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 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par fma38 Voir le message
    Du coup, comment faut-il tester le cas de figure avec le os.environ["CHILD"] ? À quel endroit faire ce test ? Dans Bottle ? Ça ne me pose pas de problème d'aller modifier son code (en plus, il s'agit d'un unique module, que je peux intégrer dans mon package pour le moment)..
    Désolé, mais je n'ai pas eu de "design" où appeler ".run" en dehors du block "__main__" avait quelque intérêt... donc je ne sais pas.

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

Discussions similaires

  1. [VB.NET] Lancement appli unique
    Par Tybaud dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/08/2006, 10h43
  2. Lancement appli au démarrage de linux (ubuntu)
    Par _matt_44 dans le forum Linux
    Réponses: 8
    Dernier message: 24/01/2006, 09h45
  3. Lancement appli à partir d'extension dans une URL dans IE
    Par Sniper94-2 dans le forum Windows
    Réponses: 3
    Dernier message: 03/11/2005, 17h55
  4. [VB.NET] Ouvrir fichier dans appli par double-clic dessus
    Par vynce dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/03/2005, 16h43
  5. [Classpath][jar]pb lancement appli
    Par Antunes dans le forum Général Java
    Réponses: 4
    Dernier message: 21/09/2004, 15h11

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