Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1435 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [python - nioube inside] boucle infinie qui fait planter mon GUI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[python - nioube inside] boucle infinie qui fait planter mon GUI

n°490593
Evolvox
Toujours y croire, toujours...
Posté le 18-08-2003 à 19:54:35  profilanswer
 

:hello:  
 
Dans un tutoriel, j'ai trouvé un exemple de programme qui permet de faire communiquer 2 pc entre-eux via des messages, selon le modèle client-serveur. Le code est très bien expliqué (ça m'a permi d'en apprendre pas mal sur les sockets) et fonctionne très bien en ligne de commande.
 
Motivé que je suis, je me suis décidé à créer un GUI (oui, je sais, ça pue les utilisateurs  :o ) pour en faire une sorte de messagerie instantanée du style msn messenger en très simplifié bien entendu.
 
Mais bon, je suis pas venu ici pour vous raconter ma vie... Le problème, c'est que j'en ai un. A certain moment du code, il faut que le programme serveur reste constammant à l'"écoute" d'un connexion possible d'un client. Cela se traduit par une boucle infinie de type  
 
while 1:
 
Si cela ne pose pas de problème en ligne de commande, ça en pose en mode fenêtre : le programme se bloque et ne répond plus...  
 
La grande question est donc : que faire pour empêcher cela ? (Oui je sais, un roman fleuve pour cette question bête  :o ) Merci d'avance !


Message édité par Evolvox le 18-08-2003 à 19:55:25

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
mood
Publicité
Posté le 18-08-2003 à 19:54:35  profilanswer
 

n°490651
kha69
Posté le 18-08-2003 à 20:52:49  profilanswer
 

Il faut que tu lance des differents elements de ton programmes susceptible d evoluer en parallele dans des thread. je ne sais pas comment on les implement en python mais en regardant des codes vites fait il me semble qu il suffit de creer un objet et lui assigner une fonction... mais a verifier.

n°490727
Evolvox
Toujours y croire, toujours...
Posté le 18-08-2003 à 22:03:48  profilanswer
 

Je suis à ce point nioube que je ne connais pas encore le concept de "thread"  :sweat: ... mais je vais me renseigner  :)


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°490766
Evolvox
Toujours y croire, toujours...
Posté le 18-08-2003 à 22:59:12  profilanswer
 

Sur un autre topic j'ai trouvé la défintion d'un thread, et effectivement c'est très certainement de cela que j'ai besoin:
 


Normalement, dans un programme, tu as un seul flux d'exécution. Ton programme commence à un endroit, exécute des instructions et finit à un autre. Mais il ne fait qu'une seule chose à la fois (quand il exécute une fonction, il en exécute pas une autre).
 
Ce flux d'exécution, c'est un thread. Tu peux en créer d'autres, ce qui permet à ton programme de faire 2 (ou plus) choses en même temps.
Comme si tu avais 2 programmes fonctionnant en même temps, mais qui utiliseraient la même zone mémoire, les même variables...
Par exemple, tu peux en avoir un qui est bloqué en attente de données venant du réseau, tout en en ayant un autre qui traite les évènements clavier/souris ou autre...
 
Mais ca implique un certain nombre de problème d'accès concurrents quand plusieurs threads accèdent simultanément aux même variables.


 
Reste à savoir comment l'utiliser maintenant..


Message édité par Evolvox le 18-08-2003 à 23:01:45

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°491616
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 19:39:15  profilanswer
 

Personne n'aurait un bout de code où il utilise un thread, pour que je puisse l'étudier ?


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°491628
Taz
bisounours-codeur
Posté le 19-08-2003 à 19:49:55  profilanswer
 

python.org  :o  
 
et tu ferais bien de te trouver un cours sur la multi-programmation, y a 3 messages, tu savais meme pas prononcer thread :D

n°491638
polo021
Posté le 19-08-2003 à 20:03:42  profilanswer
 

Faut planter du gui si tu veux pouvoir embrasser dessous le 31 au soir  :o  
C'est bien  :o

n°491681
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 20:46:21  profilanswer
 

Je demande au minimum un TT pour postage d'une blague dans la mauvaise catégorie du forum... Il y a un tomic unique pour ça http://forum.hardware.fr/forum2.ph [...] 291&cat=13 :o
 
Et puis grâce au thread, mon écran est propre maintenant (~5 litres de postillons à essayer de le prononcer :o).  
 
Si quelqu'un a lien pour un bon tuto sur la multi-programmation, qu'il le poste maintenant ou qu'il se taise à jamais !


Message édité par Evolvox le 19-08-2003 à 20:47:02

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°491690
Taz
bisounours-codeur
Posté le 19-08-2003 à 20:50:38  profilanswer
 

achète toi un bouquin
 
et pour la mise en oeuvre des threads en python
 

Taz a écrit :

python.org  :o

[:quoted]
 

n°491701
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 20:58:41  profilanswer
 

Contrairement à ce que tu aurais pu croire, j'avais déjà cherché dans la doc... ;)
 
http://www.python.org/doc/current/ [...] ading.html
 
Seulement une liste de méthodes c'est bofbof pour me faire comprendre la mise en place d'un thread  :(  (merde, j'ai plus de kleenex pour essuyer ce moniteur de @#&%)


Message édité par Evolvox le 19-08-2003 à 20:59:05

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
mood
Publicité
Posté le 19-08-2003 à 20:58:41  profilanswer
 

n°491704
Taz
bisounours-codeur
Posté le 19-08-2003 à 21:00:26  profilanswer
 

j'ai dis le livre avant !

n°491705
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 21:00:30  profilanswer
 

Et est-ce que l'achat d'un bouquin vaut vraiment le coup par rapport à un tutorial de 250 pages (de notre ami Gérard Swinnen) ?


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°491708
Taz
bisounours-codeur
Posté le 19-08-2003 à 21:03:17  profilanswer
 

Evolvox a écrit :

Et est-ce que l'achat d'un bouquin vaut vraiment le coup par rapport à un tutorial de 250 pages (de notre ami Gérard Swinnen) ?


1) oui
2) je sais pas s'il aborde ça, c'est un ouvrage pour débutant
3) après sur le web, tu dois avoir des ouvrages en anglais
4) t'es typiquement dans la merde: t'es un débutant comme on l'est qu'une fois dans sa vie, tu ramasses des bouts de code à droite à gauche, tu mets tout ensemble enchangeant le nom des varaibles pour que ça passe et tu bricoles jusqu'a que ça passe l'analyse synthaxique. au lieu de faire n'importe, tu prends le bouquin de GS, tu le lis de A-Z et tu fais des applications à ta mesure

n°491760
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 21:37:49  profilanswer
 

Taz a écrit :


1) oui
2) je sais pas s'il aborde ça, c'est un ouvrage pour débutant
3) après sur le web, tu dois avoir des ouvrages en anglais
4) t'es typiquement dans la merde: t'es un débutant comme on l'est qu'une fois dans sa vie, tu ramasses des bouts de code à droite à gauche, tu mets tout ensemble enchangeant le nom des varaibles pour que ça passe et tu bricoles jusqu'a que ça passe l'analyse synthaxique. au lieu de faire n'importe, tu prends le bouquin de GS, tu le lis de A-Z et tu fais des applications à ta mesure


 
1) Je demande ça parce que pendant mon apprentissage du php, j'ai acheté un bouquin et il ne malheureusement que très peu servi par rapport à ce qu'on trouvait sur le net...
 
4) T'es medium pour savoir comment je code  :heink: ? Le code du serveur c'est du copier/coller mais je l'ai compris (crois-moi pas si tu veux  :p ), et l'interface c'est du entièrement fait maison, à grands coups d'aide de la doc python. Les préjugés sur les débutants caimal, on a pas tous été comme toi à tes débuts  :o  
 
Mais j'ai compris le message (je suis pas borné non plus, seulement têtu   :ange: ) : je m'achète un bon bouqin (genre Précis&Concis non ?) et je reviens t'emmerder dans 2 bons mois avec des questions intéressantes !  


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°491765
Taz
bisounours-codeur
Posté le 19-08-2003 à 21:39:47  profilanswer
 

les précis et concis fait 30pages et ne contient que le prototypes des fonctions + 1 ligne de commentaires
 
trouve toi de la documentation sur la programmation concurente, pas de la doc python .|

n°491790
Evolvox
Toujours y croire, toujours...
Posté le 19-08-2003 à 21:56:10  profilanswer
 

Merci pour les conseils :jap:  
 
Prout, j'ai plus d'encre pour imprimer les 150 pages qui restent pour le manuel de GS (le support écran ça pue).
 
A dans un bon moment  ;)  
 


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°492089
e_esprit
Posté le 20-08-2003 à 09:01:28  profilanswer
 

Part sur une base de serveur dans ce style :

Code :
  1. class ConnectManager( Thread ):
  2.     """
  3.     Classe qui gere le service au client
  4.     """
  5.     def __init__( self, socket, addr ):
  6.         Thread.__init__( self )
  7.         self.socket = socket
  8.         self.addr = addr
  9.    
  10.     def run( self ):
  11.         '''
  12.             Cette méthode effectue le traitement de la partie serveur.
  13.         '''
  14.         ## Exemple bidon :
  15.         self.socket.sendall("truc" )
  16.         machin = self.socket.recv(512)
  17.         self.socket.shutdown(0)
  18.         self.socket.close()
  19. if __name__ == '__main__':
  20.     s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
  21.     s.bind( ( HOST, PORT ) )
  22.     print 'Server Running on', HOST , 'waiting for connections on port', PORT
  23.     try:
  24.         while 1:
  25.             s.listen(1)
  26.             conn, addr = s.accept()
  27.             serv = ConnectManager( conn, addr )
  28.             serv.start()
  29.     except:
  30.         print "Interruption Volontaire de l'utilisateur (^C)."
  31.         s.close()
  32.         print 'Shuting Down...'
  33.         sys.exit(1)

n°492096
Taz
bisounours-codeur
Posté le 20-08-2003 à 09:10:58  profilanswer
 

moi j'aurai fait l'inverse: le gestionnaire d'écoute dans un thread    [:spamafote]

n°492115
e_esprit
Posté le 20-08-2003 à 09:43:12  profilanswer
 

Taz a écrit :

moi j'aurai fait l'inverse: le gestionnaire d'écoute dans un thread    [:spamafote]  


C'est vrai que pour un service de chat ca parait plus logique...
Mais mon exemple est un service reseau dont le but n'est pas la communication entre client, mais la gestion de plusieurs client en parallèle. C'est juste pour illustrer le principe de threads appliqué au réseau. ;)

n°492729
Evolvox
Toujours y croire, toujours...
Posté le 20-08-2003 à 18:38:50  profilanswer
 

Merci e_esprit :jap: Je reviendrais à ton code quand je maîtriserai correctement les classes et tout le tintouin.


---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [python - nioube inside] boucle infinie qui fait planter mon GUI

 

Sujets relatifs
[Python] Particularité python pour les listes ?[problemes mysql] innodb inside
(Common) LISP ou Python ?[Python]Ordonner une liste d'objet (sorting)
[C] Ajout d'un char en fin de chaine en boucle[python]classe + liste dans constructeur ??
[Python] Communication avec un serveur (pop)[Python] Session comme en PHP
[python]Question de saut de lignecommunication client/serveur avec python
Plus de sujets relatifs à : [python - nioube inside] boucle infinie qui fait planter mon GUI


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR