2017-01-05 2 views
0

Ich muss eine Verbindung zu mehreren Maschinen und führen Sie eine Reihe von Befehlen auf ihnen. Ich möchte dies mit Threading umsetzen, bin mir aber nicht sicher, wie ich das erreichen kann. Im Folgenden finden Sie den Code ein:Verbinden mit mehreren Maschinen mit Threading in Python

import threading 

def conn_to_board(board_ip): 
    # ssh connection to machine 
    # set of commands 

board_ip = ["1.1.1.1", "2.2.2.2", "3.3.3.3", "4.4.4.4"] 

''' 
for i in board_ip: 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    t1.join() 
''' 

Kann mir jemand helfen, diese mit Einfädeln zu erreichen?

+0

Werfen Sie einen Blick auf die [pxssh] (http: // pexpect .readthedocs.io/de/stable/api/pxssh.html) Modul in der [pexpect] (http://pexpect.readthedocs.io/en/stable/index.html) Bibliothek. –

Antwort

1

Angenommen, die Funktion conn_to_board(board_ip) macht bereits, was Sie wollen und bindet nicht den gleichen lokalen Port oder exclusivlu verwendet eine Ressource, Multithreading ist einfach und Ihr Code ist fast korrekt. Das einzige Problem, das ich in Ihrem kommentierten Code sehen kann, ist, dass Sie jeden Thread innerhalb der Schleife verbinden, der sie nacheinander serialisiert - anders gesagt, das Multithreading ist hier völlig nutzlos.

sollten Sie zuerst erstellen und alle Threads beginnen (wenn die Zahl niedrig genug ist) und verbinden sie dann in einer neuen Schleife:

... 
thrs = [] # to store the threads 
for i in board_ip: # create and start the threads 
    t1 = threading.Thread(target=conn_to_board, args=(i,)) 
    t1.start() 
    thrs.append(t1) 
for t1 in thrs:  # join all the threads 
    t1.join() 
+0

Danke Serge, ich habe was ich an deiner Antwort vermisst! Es funktioniert jetzt. –

1

Es klingt, als ob Sie versuchen, Ansible oder Salt neu zu erfinden. Möglicherweise möchten Sie untersuchen, ob Sie eines dieser Tools verwenden, um Ihr Ziel zu erreichen, eine Reihe von Shell-Befehlen auf vielen Computern auszuführen. Beide sind in Python geschrieben und erweiterbar.