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

Python Discussion :

Thread et GTK


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Thread et GTK
    Bonjour,

    Voilà, débutant en python, je me suis amusé à coder en python 2.7 un plugin pour le lecteur quodlibet qui fournit une API en REST au lecteur.
    J' ai codé mon plugin avec le "framework" Bottle
    Mon code est fait de cette façon - en court ...

    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
     
    import threading
     
     
    class MyServer(WSGIRefServer):
     
        def run(self, Bapp):
            from wsgiref.simple_server import make_server
            srv = make_server(self.host, self.port, Bapp)
            self.srv = srv
            srv.serve_forever()
     
        def shutdown(self):
            self.srv.server_close()
     
        @route('/QLWS/v1/infos/quodlibet')
        def _F_exemple():
     
              <ici je lance des fonctions propre à quodlibet, mettons app.player.play, par exemple ....>
            _infos = {}
            _infos["version"] = const.VERSION
            _infos["artists"] = const.ARTISTS
            response.content_type = 'application/json'
            return json.dumps(_infos)
     
     
    Bapp = Bottle()
    class server_launch():
        def run_server(self):
            run(server=self.server)
     
        def start_server(self):
            self.server = MyServer(host=get_Addr(), port=get_port_num())
            print_d("starting server")
            self.server_thread = threading.Thread(target=self.run_server).start()
     
        def stop_server(self):
            self.server.shutdown()
            self.server_thread.join()
            print_d("stopped server")
    Comme vous pouvez le voir, je lance le serveur dans un thread séparé avec threading. Quand j' entre dans mon navigateur http:\\localhost:8000/QLWS/v1/infos/quodlibet, je rentre dans la fonction avec ce décorateur, ici la fonction _F_Exemple().

    Mon code fonctionne très bien, mais vue que je rentre d' un thread (celui du serveur donc..) dans quodlibet, écrit en GTK, vous imaginez ce qui se produit couramment (mais pas toujours ...), l' IHM freeze ou alors Quodlibet plante complètement.
    Il faut en quelque sorte "re-synchroniser" mon callback pour qu' il n' interfère pas avec l' IHM de quodlibet.
    Dûe à l' architecture en plugin, je suis obligé me semble-t-il d' utliliser un thread, sachant que "subprocess" ne fonctionne pas avec GTK apparemment ...(enfin, j' ai essayer, ça marcha pas ...)

    Sinon, mon appli fonctionne bien, j' ai donc une API en REST avec un retour en JSON et un client Web minimaliste fonctionnel.
    J' aimerais solutionner ce problème d' abord avant de continuer à avancer.
    J' ai entrepris des recherches de mon côté, mais pour l' instant rien de concluant.

    Si vous avez des idées ...
    Merci !
    (Sinon, je peut toujours intervenir avec quodlibet avec un pipe FIFO ... mais j' aimerais faire sans ...)

  2. #2
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Bon, j' imagine que mon problème est insoluble ?
    Merci quand même.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par bluefish01 Voir le message
    Bon, j' imagine que mon problème est insoluble ?
    Merci quand même.
    Votre problème n'est peut être pas insoluble mais si personne n'a eu l'occasion d'utiliser l'interface ReST de Quod Libet pour vous faire profiter de ses retours d'expérience, pas grand monde va se lancer dans des tests juste pour le fun.
    Peut-être faudrait-il voir s'il n'existe pas un forum utilisateurs spécifique...

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

  4. #4
    Membre à l'essai
    Femme Profil pro
    Dev
    Inscrit en
    Mars 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Dev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Merci pour votre réponse.
    J' ai déjà essayer, en effet, de joindre des personnes qui développent QL.
    Peut-être aurais-je finalement un retour de leur part.
    Merci

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas du tout les logiciels dont tu parles, mais je pratique souvent les thread avec PyQt.

    Comme PyQt n'est pas "thread-safe", je construis mes threads comme des classes séparées, et leur communication avec le programme principal PyQt se fait toujours par émission de messages, traités ensuite dans la boucle de traitement des évènements de la partie graphique. Construit comme ça, ça marche très bien et ça ne freeze jamais.

    Mais je ne sais pas si on peut faire comme ça avec Gtk.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. utilisation des threads avec gtk en C sous linux
    Par zerimbak dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 25/04/2011, 19h23
  2. Les Thread avec GTK+
    Par bilred dans le forum Linux
    Réponses: 3
    Dernier message: 13/04/2009, 14h19
  3. Les Thread avec GTK+
    Par bilred dans le forum GTK+
    Réponses: 10
    Dernier message: 10/04/2009, 00h44
  4. [GTK+] Thread en GTK+
    Par Yunchi dans le forum GTK+ avec C & C++
    Réponses: 9
    Dernier message: 23/02/2009, 16h30
  5. Thread et gtk
    Par flo_k dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/12/2008, 01h07

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