Probleme avec les threads
Bonjour a tous,
Je ne pense pas être le seul a avoir des problèmes avec les threads mais je ne pense pas que se problème est déjà été posé (en tout cas je les pas vue ^^).
Voila c'est très simple, je crée un lecteur de musique (mais sa n'a rien a voir avec les fonctions de musiques), je tiens a signaler que je gère une interface graphique sous pygtk (glade) et donc j'utilise les threads pour lire ma musique et me permettre de continuer a pouvoir utiliser mon interface (j'ai posté sa ici car je ne pense pas que le probleme vienne de l'interface).
En gros lorsque je clic sur play sa lance le thread (voir script ci-dessous) sauf que quand je le lance, sa fait rien, ou en tout cas jusqu'a ce que je ferme mon interface ou la le thread prend le relai (mais dans se cas le thread sert a rien car il gere pas ma fonction en paralelle).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class programme:
def lancer(self):
Player(fichier).start()
class Player(threading.Thread, programme):
def __init__(self, nom):
self.nom = nom
threading.Thread.__init__(self)
def run(self):
...lire la chanson |
Voila comment je lance mon thread (j'ai pas tout mit bien sur ^^).
J'ai trouvé une solution temporaire mais vraiment pas pratique, voici mon new script (juste quelques lignes en plus)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class programme:
def lancer(self):
Player(fichier).start()
class Player(threading.Thread, programme):
def __init__(self, nom):
self.nom = nom
threading.Thread.__init__(self)
gobject.idle_add(self.rafraichissement)
def rafraichissement(self):
return True
def run(self):
...lire la chanson |
Ici pas grand chose diffère mais sa marche, pourquoi ? Alors j'ai utilisé les modules gobject pour dire a mon programme, lorsque ce dernier est inactif (quand je fais rien) tu raffraichis alors rafraichir pour moi c'ets juste le défiger sa force ma classe a fonctionner et la ma fonction run marche niquel.
Mais alors ou est mon probleme si j'ai trouvé une petite solution ? Mais la le probleme devient énorme lol, c'est que dans se cas de figure la, le programme tourne 24/24 7/7 et meme jour ferrier lol, non mais se que je veux dire c'est que en general les programmes utilises les ressources de l'ordi temporairement mais la sa pompe tout, direct je monte à 50 k de mémoire utilisé, mon processeur est à 50 % tout le temps que le programme est lancé, c'est un vrai gouffre cette solution. Impossible de lancer d'autres programmes un peu lourds sans tout faire rammer.
Je me demandais donc (je demande mais je me dis que c'est obligé qu'une solution existe car je n'imagine pas que tous les programmes python qui utilises une interfaces graphique et des thread est recourd a sa), s'il n'y avait pas un moyen pour dire au thread de se lancer et de pas se figer ou attendre la fin du programme ?
Merci a tous d'avance et bonne continuation