Forum Programmation.python Probleme de freeze en utilisant les thread python

Posté par  (site web personnel) .
Étiquettes : aucune
0
27
jan.
2005
Python est un langage que j'adore mais qui des fois me rend fous par ce genre d'exemple, voici un code qui fait figer python en win32 mais pas sous linux ....

import threading,time

def fct(a,b) :
print "fct(%d,%d)"%(a,b)
time.sleep(1)
print "fct(%d,%d)=>%d"%(a,b,a+b)
return a+b

t = threading.Thread(target=fct,args=(3,5))
t.start()
print t

Ceci invoque un deuxieme probleme chez moi.

J'ai une application WXpython avec des widget classique ( label, txtctrl ou gauge ) et des que je SetValue dans un thread un des widget ca freeze tous.
Alors que le GetValue marche tres bien dans les threads, mais pas le SetValue ca freeze tous idle....

Un autre exemple de Thread qui freeze idle:

import time
import thread

def parseXML(delai,a):
while a==1:
print "on parse le XML, puis on attend",delai,"sec"
time.sleep(delai)
print " fin des ",delai,"secondes :",a


print "début de l'appli"
thread.start_new_thread(parseXML, (1,1))
for i in range(1000): print 'coincoin' # pour mettre en évidence que le script tourne toujours malgré le thread


Enfin jetrouve ca tres louche surtout que c'est des exemples simples.
  • # Bizarre, chez moi ça freeze pas

    Posté par  (site web personnel) . Évalué à 1.

    C:\dev\koalaclient>python
    Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import threading,time
    >>> def fct(a,b) :
    ... print "fct(%d,%d)"%(a,b)
    ... time.sleep(1)
    ... print "fct(%d,%d)==>%d"%(a,b,a+b)
    ... return a+b
    ...
    >>> t=threading.Thread(target=fct,args=(3,5))
    >>> t.start()
    >>> fct(3,5)
    pfct(3,5)==>8
    rint t
    <Thread(Thread-1, stopped)>
    >>>

    Tu remarqueras l'intervention du thread pendant que je saisi "print"


    Remarque pour les threads et les GUI, autant que possible faire les interractions avec la GUI dans le thread qui a créé la GUI et qui gère la boucle évènementielle. Ca peut marcher en attaquant la GUI à partir d'autres threads, mais c'est généralement sans garantie et plantogène.

    De mémoire, sous windows lorsque tu manipules des contrôles dans d'autres threads, en bas niveau (WIN32) ça poste un message de ton thread dans la file de messages du thread qui gère la GUI, et ça attends que le message ait été traité.

    Autre chose, lorsque tu as a gérer une GUI évite de lancer ton script via IDLE. Tu peux l'y éditer, mais pour le lancer vaut mieux passer par la ligne de commande. Les interractions entre IDLE et le script GUI que tu lances se passent souvent mal.

    Ca aidera pas beaucoup pour ton freeze de thread...

    A+

    Laurent.

    Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

    • [^] # Re: Bizarre, chez moi ça freeze pas

      Posté par  (site web personnel) . Évalué à 1.

      ba le probleme c'est que quand je lance mon script python via la console windows je fais

      c:\python23\python d:\dev\AF_remote_install\af_remote.py

      il m'execute le script comme si il se trouver dans c:\python23 et evidemment toutes les ressources externe dans le d:\dev\AF_remote_install\data il les voient pas :'(
      • [^] # Re: Bizarre, chez moi ça freeze pas

        Posté par  (site web personnel) . Évalué à 1.

        Dsl j'avais pas vu le titre " Bizarre, chez moi ça freeze pas"

        Franchement je susi sur que si tu passe par IDLE ca plante sur win32 et pas sur linux. Y'aurait pas comme un soucis ?
        • [^] # Re: Bizarre, chez moi ça freeze pas

          Posté par  . Évalué à 2.

          Franchement je susi sur que si tu passe par IDLE ca plante sur win32 et pas sur linux.


          Raté, chezmoicamarche (les 2, sous win et nux, sous idle et en ligne de commande, python 2.3 2.4, sans les mains et la porte ouverte.).

          Y'aurait pas comme un soucis ?


          Si : réinstalle Windows/Python/L'interface chaise-écran (rayez les mentions inutiles).

          --
          Thomas
      • [^] # Re: Bizarre, chez moi ça freeze pas

        Posté par  (site web personnel) . Évalué à 1.

        Là tu as un problème disons de localisation de fichiers de ressources.

        Tu peux utiliser le os.path.abspath(__file__) pour trouver où est ton module, ensuite tu peux le manipuler avec les autres fcts de os.path pour en extraire le directory et jouer avec.

        Vu le nom ça a plutôt l'air d'un script d'installation à utiliser une fois... donc je ne te cause pas du PYTHONPATH :-)

        Note: tu devrais poster sur la liste pythonfr (mailto:python@aful.org archives sur http://www.aful.org/wws/arc/python(...) ), où le nombre d'experts potentiels est plus élevé (ou sur news:fr.comp.lang.python).

        A+, et bon courage pour tes threads.

        Laurent.

        Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

  • # re

    Posté par  (site web personnel) . Évalué à 1.

    LE probleme est que j'ai desinstallé 2 fois python 2.3, j'ai essayé le 2.4 et ca me fait pareil, j'ai tous desintallé et remis le 2.3.
    • [^] # Re: re desinstallation...

      Posté par  (site web personnel) . Évalué à 1.

      Au cas où:

      import sys
      for i in sys.path : print i

      Et vérifie qu'il n'y a pas des trucs d'une ancienne installation qui resteraient.

      Eventuellement, si tu ré-installes à nouveau, après la désinstallation vérifie que toutes les entrées dans la registry sont bien supprimées (s'il en reste relatives à Python, supprime les).

      Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.