Ich verwende den Perspective Broker von Twisted, um zwischen dem Client und dem Server zu kommunizieren. Der Client fordert vom Server eine Remote-Methode 'remote_ssh' an. Dies veranlasst den PB-Server, eine SSH-Verbindung unter Verwendung der SSH-Bibliothek von Paramiko zu initiieren und eine Konfiguration von einem entfernten Gerät abzurufen.
Das alles funktioniert gut, aber wenn ich dies für mehrere entfernte Geräte ausführe, sehe ich das folgende Verhalten - der Perspective Broker Client sendet alle Anfragen an den PB-Server. Der PB-Server führt diese Anfragen dann eine nach der anderen aus (was in Ordnung ist), aber er gibt KEINE der Ergebnisse zurück, bis sie ALLE abgeschlossen sind.
Hier ist der relevante PB serverseitige Code:
class RMethods(pb.Root):
def remote_ssh(self, aDict):
self.login('SSH', aDict) # Login to remote device
response = self.aSSH.retrieve() # Retrieve the config
self.aSSH.close()
return response
if __name__ == "__main__":
reactor.listenTCP(1885, pb.PBServerFactory(RMethods()))
reactor.run()
Wenn ich mir verschiedene Informationen auf Systemebene (TCPDump und netstat) ansehe, sehe ich Folgendes (unter der Annahme von 5 Aufrufen der Remote-Methode):
Der Aufruf remote_ssh vom PB Client zum PB Server für die fünf entfernten Geräte erfolgt etwa zur gleichen Zeit
self.login device 1
self.aSSH.retrieve() device 1
self.aSSH.close() device 1
self.login device 2
self.aSSH.retrieve() device 2
self.aSSH.close() device 2
...
self.login device 5
self.aSSH.retrieve() device 5
self.aSSH.close() device 5
return results for all 5 devices
Ich verstehe nicht, warum mit der Rückgabe der Ergebnisse gewartet wird (d. h. warum wird gewartet, bis Gerät5 fertig ist, bevor die Ergebnisse für Gerät1 zurückgegeben werden).