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

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

Marsh Posté le 18-08-2003 à 19:54:35    

: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
Reply

Marsh Posté le 18-08-2003 à 19:54:35   

Reply

Marsh Posté le 18-08-2003 à 20:52:49    

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.

Reply

Marsh Posté le 18-08-2003 à 22:03:48    

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
Reply

Marsh Posté le 18-08-2003 à 22:59:12    

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
Reply

Marsh Posté le 19-08-2003 à 19:39:15    

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
Reply

Marsh Posté le 19-08-2003 à 19:49:55    

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

Reply

Marsh Posté le 19-08-2003 à 20:03:42    

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

Reply

Marsh Posté le 19-08-2003 à 20:46:21    

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
Reply

Marsh Posté le 19-08-2003 à 20:50:38    

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

Taz a écrit :

python.org  :o

[:quoted]
 

Reply

Marsh Posté le 19-08-2003 à 20:58:41    

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
Reply

Marsh Posté le 19-08-2003 à 20:58:41   

Reply

Marsh Posté le 19-08-2003 à 21:00:26    

j'ai dis le livre avant !

Reply

Marsh Posté le 19-08-2003 à 21:00:30    

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
Reply

Marsh Posté le 19-08-2003 à 21:03:17    

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

Reply

Marsh Posté le 19-08-2003 à 21:37:49    

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
Reply

Marsh Posté le 19-08-2003 à 21:39:47    

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 .|

Reply

Marsh Posté le 19-08-2003 à 21:56:10    

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
Reply

Marsh Posté le 20-08-2003 à 09:01:28    

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)

Reply

Marsh Posté le 20-08-2003 à 09:10:58    

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

Reply

Marsh Posté le 20-08-2003 à 09:43:12    

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. ;)

Reply

Marsh Posté le 20-08-2003 à 18:38:50    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed