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

Réseau/Web Python Discussion :

Threads avec des listes


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Threads avec des listes
    Bonjour,

    Je sollicite votre aide pour un bout de code que j'essaye en vain d'écrire mais je ne trouve pas de solution pour le faire marcher.

    L'idée est de scripter un certains nombres de taches afin qu'elles soient effectuées en parallèle sur un certain nombre de serveurs (via du SSH). Avant de démarrer les thread, le script a besoin de demander un certain nombre d'informations à l'utilisateur :
    - Le nombre de serveurs type A
    - Le nombre de serveurs type B
    - Le nom de chaques serveurs A
    - Le nom de chaques serveurs B

    Pour cette première étape j'ai procédé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    print ("Combien de serveurs A ? ")
    nbServBP = int(input())
    ServerBP = {}
    for i in range(nbServBP):
        ServerBP[i+1]=input("Nom du serveur A " + str(i+1))
     
    print ("Combien de serveurs B ? ")
    nbServMP = int(input())
    ServerMP ={}
    for i in range(nbServMP):
        ServerMP[i+1]=input("Nom du serveur B " + str(i+1))
    Je me retrouve donc avec le nom de mes serveurs stockés dans deux listes, par exemple :

    - ServerBP :{1: 'serveur1', 2: 'serveur2', 3: 'serveur3', 4: 'serveur4', 5: 'serveur5'}
    - ServerMP :{1: 'serveurA', 2: 'serveurB', 3: 'serveurC'}

    Maintenant ce que je ne sais pas faire :

    Pour chaque serveur de la liste l'idée est de lancer simultanément un thread avec une liste de taches (typiquement des commandes SSH par exemple)
    Pour l'exemple on peut se contenter de lancer les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    - Print (ServerBP[i+1])
    	- Time.sleep(3)
    Si le script fonctionne alors le résultat devrait être :
    - Serveur1serveur2serveur3serveur4serveur5

    J'ai essayé le bout de code ci-dessous mais bien évidemment ça ne fonctionne pas, ci-dessous le thread est lancé 5 fois et exécute la même itération avant de passer à la suite.
    Moi je veux en réalité lancer toutes les itérations à la fois… Ou alors trouver un moyen de lancer un thread par serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def test():
       for i in range(nbServBP):
            print (ServerBP[i+1])
            time.sleep(5)
     
    if __name__ == '__main__':
        for i in ServerBP:
            Thread(target = test).start()
    Pour donner plus d'infos si j'ai besoin de lancer des taches en paralleles c'est parce qu'un certain type d'actions doit être effectué sur chacun des serveurs à peu près au même moment.
    J'ai beau chercher je ne vois pas de solution à ce problème. Si quelqu'un a une idée ou une piste de réflexion?

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tes listes ressemblent furieusement à des dictionnaires ...

    Moi je veux en réalité lancer toutes les itérations à la fois…
    C'est le cas, où est le problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from threading import Thread
     
    def process(name):
        print("Process with server %s" % name)
     
    servers = ['serveur1', 'serveur2', 'serveur3', 'serveur4', 'serveur5']
    for s in servers:
        Thread(target=process, args=(s,)).start()
    Attention, si la tâche prend un peu de temps (e.g. attendre une réponse du serveur) alors les process ne s'exécuteront pas dans l'ordre donné.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci Vinss

    Ca fonctionne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performances avec des listes d'objets
    Par metalcoyote dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2008, 11h11
  2. Problème de rendu avec des listes
    Par Erwane dans le forum Scheme
    Réponses: 19
    Dernier message: 03/03/2008, 21h27
  3. Page avec des "List/Menu" liées
    Par Atemi76 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 16/08/2007, 14h51
  4. Réponses: 7
    Dernier message: 22/09/2006, 15h52
  5. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24

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