Bonjour à tous,
Je créé en ce moment un programme qui permet de rechercher un login dans un parc informatique. Ce parc est décomposé en 14 salles nommées de "a" à "n". Je fais une recherche brutale ; c'est à dire que je me connecte par ssh sur chaque machine et je regarde si "login" y est.
Pour rendre la recherche plus rapide (il y a 20 postes par salle), je créé un thread par salle. Seulement, il faudrait que je récupère la valeur renvoyé par les threads. Savez-vous comment je pourrais faire ça ?
J'ai essayé ça :
def ThreadchercheLogin(login,salle):
..."""thread cherchant un si un login"""
...pour chaque ordi dans la salle:
......si login est sur ordi:
.........return ordi
le problème, c'est que je n'arrive pas à récupérer la valeur retourné par le thread.
Vous avez une idée ?
# stockage retour dans base ou fichier
Posté par raj deenoo . Évalué à 1.
ou meme de renvoyer la valeur dans une base de données ...
je sais c'est usine a gaz comme methode... mais je vois pas d'ou pourrait venir le problème.
# ben
Posté par cho7 (site web personnel) . Évalué à 1.
La solution simple serait donc de mettre une variable "retour" au sein de ta classe MonThread(héritant de threading.Thread), et quand tes threads sont tous terminés, tu peux lancer une fonction qui va aller afficher le resultat contenu dans monthread1.retour, monthread2.retour, etc.
[^] # Re: ben
Posté par Namlook . Évalué à 1.
#######################
import threading
class MonThread(threading.Thread):
--def __init__(self):
----threading.Thread.__init__(self)
----self.result = None
--def run(self):
----print "bla"
----self.result = "bla"
a = MonThread()
a.start()
print "result",a.result
########################
Ca me renvoie :
result None
bla
donc le thread fonctionne bien mais result ne change pas...
# Queue
Posté par jjl (site web personnel) . Évalué à 2.
http://docs.python.org/lib/module-Queue.html
C'est fait pour ca.
Un thread controleur qui crée une queue, demarre les autres et se met en attente de reponses.
[^] # Re: Queue
Posté par Namlook . Évalué à 1.
################################
import threading
import Queue
queue = Queue.Queue(-1)
def affiche():
--queue.put("ble")
a = threading.Thread(target=affiche,args=())
a.start()
while queue.qsize() == 0:
--pass
print queue.get()
################################
Mais pourquoi ça ne marche pas avec une simple variable ? :
################################
result = None
def affiche():
--result = "ble"
a = threading.Thread(target=affiche,args=())
a.start()
while result == None:
--pass
print result
################################
ce code tourne à l'infinie. La variable result n'est jamais modifiée. Pourquoi ?
En tout cas, merci du tuyau
[^] # Re: Queue
Posté par jjl (site web personnel) . Évalué à 2.
Ta variable result est locale à la fonction affiche() voir :
http://www.python.org/doc/faq/programming/#how-do-you-set-a-(...)
essaye de rajouter simplement
global result
avant result="ble"
Et de toute facon les variables globales saimal(tm) :)
(surtout sans protection par semaphore dans un contexte multithread)
# ca va paraitre bete mais ...
Posté par NeoX . Évalué à 1.
pourquoi alors ne pas utliser le serveur de login pour savoir si la personne est connecté.
à l'epoque ou j'etais en université on avait les commandes who/whois/whereis
qui permettaient de savoir si la personne etait là, qui elle etait et ou elle etait connectée.
[^] # Re: ca va paraitre bete mais ...
Posté par Namlook . Évalué à 1.
Si tu en as une je suis preneur ^^
[^] # Re: ca va paraitre bete mais ...
Posté par NeoX . Évalué à 1.
par contre si les utilisateurs se connectent à partir d'un login/passe fournit sur chaque PC, alors il te faut faire le tour des PC
maintenant avec ssh et who tu dois pouvoir faire un truc du style :
pour i de 1 à n
ssh le_pc_$i && who
deja ca simplifie ton histoire de thread qui fait des truc compliqué.
d'autant plus que le ssh login peut etre automatisé en echangeant les clé entre les postes il me semble.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.