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 :

Problème Thread & win32


Sujet :

Python

  1. #1
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut Problème Thread & win32
    Salut à toute la communauté des développeurs,

    Voilà je viens vous soumettre un code sur lequel je bloque depuis quelques jours. Celui génère une erreur dont je n'arrive pas à bout...

    Il s'agit en fait d'appeler une fonction dans un Thread pour qu'elle puisse s'exécuter dans le même temps que le Thread principal continue. Le problème c'est que la fonction, ici CTRL_DD(), fait appel à la bibliothèque win32com dont les éléments semblent ne pas accepter d'être exécuté ailleurs que dans le Thread principal.

    J'espère que vous aureez de l'inspiration, je suis vraiment à cours de ressources...


    Merci.

    L'erreur:
    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
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File "C:\Python24\lib\threading.py", line 442, in __bootstrap
        self.run()
      File "C:/Documents and Settings/adm/Bureau/Jérémy - Stage/Python/Projet_CTRL/test Dutonia 3.pyw", line 69, in run
        print self.nom()
      File "C:/Documents and Settings/adm/Bureau/Jérémy - Stage/Python/Projet_CTRL/test Dutonia 3.pyw", line 14, in CTRL_DD
        objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
      File "C:\Python24\Lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
        dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
      File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
        return (_GetGoodDispatch(IDispatch, clsctx), userName)
      File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 78, in _GetGoodDispatch
        IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
    com_error: (-2147221008, "CoInitialize n'a pas \xe9t\xe9 appel\xe9.", None, None)
    Le code:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    import time, threading
    import wx
    import win32com.client
     
    def CTRL_DD():
    		"Controle de l'espace disque et annonce d'une surcharge ou non."
    		print "CTRL_DD"
    		help = "Controle l'espace restant d'un disque et annonce son etat de charge."
     
    		strComputer = "."
    		objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
    		objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
    		print "salut"
    		colItems = objSWbemServices.ExecQuery("Select * from Win32_LogicalDisk")
     
    		fp = file('ARG_CTRL_DD.txt')
    		Pourcentage = fp.readline(1024)
    		NomDisk = fp.readline(1024)
     
    		for objItem in colItems:
    				#On vérifie si le volume est un disque dur (Type3:DD)
    				if objItem.DriveType == 3:
    						NomDisk = str(NomDisk) + ":"
    						Volume = objItem.Name
     
    						Espace = float(objItem.Size)
    						Libre = float(objItem.FreeSpace)
    						Occupe = Espace - Libre
     
    						Pourcentage = "0." + str(Pourcentage)
    						Pourcentage = float(Pourcentage)
     
    						Alerte = Espace - (Espace * Pourcentage)
    						Go = 1000000000
    						i = 0
    						if NomDisk == Volume:
    								i += 1
    								commentaire =  "(" + str(Volume) + " " + str(int(Occupe/Go)) + "/" + str(int(Espace/Go)) + "Go)"
    								SurfUtil = str(100 - int(Libre/Espace*100))
    								if Espace != None:
    										if Libre <= Alerte:
    												commentaire = "Disque en surcharge" + str(commentaire)
    												retour = "CTRL_DD-False-" + commentaire + "-"  + help
    												return retour
    										else:
    												commentaire =  "Il y a suffisament d'espace sur le disque" + str(commentaire)
    												retour = "CTRL_DD-True-" + commentaire + "-"  + help
    												return retour
    						elif i == 0:
    								commentaire = "Le disque " + NomDisk + " n'existe pas"
    								retour = "CTRL_DD-False-" + commentaire + "-" + help
    								return retour
     
    def FonctSalut():
    		print "salut"
     
    class ThreadSonde(threading.Thread):
    	def __init__(self, nom):
    		threading.Thread.__init__(self)
    		self.nom = nom
     
    	def run(self):
    		i=0
     
    		while i < 10:
    			print self.nom()
     
    			print i
    			time.sleep(5)
    			i+=1
     
    #Ici, ça fonctionne, mais ce n'est pas dans le ThreadSonde
    #while i<10: sera remplacé plus tard par un evt while i=True:
    i=0
    while i < 10:
    	print self.nom()
     
    	print i
    	time.sleep(5)
    	i+=1
     
    T_S = ThreadSonde(CTRL_DD)
    T_S.start()

  2. #2
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    comme le dit le shell python CoInitialize n'a pas été appellé
    il faut donc faire un
    puis dans le run :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pythoncom.CoInitialize()

  3. #3
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Maaaaah! Tout 'H'onnement!

    En fait c'est les \xe9 m'ont un peu perturbé... Un moyen de les chinter?

    Mercimerci et vive mario RPG par la même occasion!

  4. #4
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    généralement ce genre problème vient d'un problème d'encodage,
    il doit falloir indiquer à python d'utiliser latin par défaut ou un quelque chose comme ça

Discussions similaires

  1. Problème thread et fonction récursive
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2006, 12h19
  2. Problème thread Boost
    Par TuRn3r dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 01/06/2006, 18h34
  3. Problème Thread et Scan de dossiers en C
    Par tptiben dans le forum Windows
    Réponses: 8
    Dernier message: 15/05/2006, 18h25
  4. Problème Thread
    Par Royd938 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 07/04/2006, 09h10
  5. [VC++ Express] Problème de compilation win32.
    Par fab29000 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 20h16

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