Python - подключение SSH-оболочек к удаленным устройствам с помощью потоков - PullRequest
0 голосов
/ 14 ноября 2018

Проблема, которую я хотел бы решить, заключается в следующем:

  • создание 5-10 сеансов хоста ssh одновременно (многопоточность ??)
  • оставление соединений установлено и ожидаетвнешние вызовы
  • выполняют предопределенные методы в классе Host (например, getUberImportantDetails ())
  • предоставляют информацию и выбранные методы для оболочек ssh с API-интерфейсом покоя колбы.

    class Host():
        def __init__(self, host, user, psw):
            super().__init__(host, user, psw)
            self.bypass = ''
            self.state = "IDLE"
    
        def connect(self):
           self.ssh = paramiko.SSHClient()
           <a lot of regexp based SSH processing>
    
       def getUberImportantDetails(self):
            output = self.execute("show very important data")
        return SRE4BGPNeighborParser(output)
    

Метод хоста init () должен получить IP-адрес хоста, имя пользователя и пароль.Перед тем, как получить какую-либо информацию от объекта, мне нужно запустить метод connect, чтобы установить SSH-соединение в диапазоне перемычек.Когда маршрутизация соединения с классом хоста завершена, я готов взаимодействовать с удаленным устройством.

Мне удалось инициализировать объект класса с помощью обертки потоков, но я также хочу оставить потоки работающими после connect ()Функция выполнила всю работу и обработчик готов к взаимодействию с удаленным устройством.Как мне это сделать красиво?Есть ли лучший способ решить мою проблему?

def threaded(fn):
    def wrapper(*args, **kwargs):
        thread = threading.Thread(target=fn, args=args, kwargs=kwargs)
        thread.start()
        return thread
    return wrapper


class ThreadHost(threading.Thread, Host):
    def __init__(self, host, user, psw):
        super(Host, self).__init__(host, user, psw)
        self.bypass = ''
        self.state = "IDLE"

    @threaded
    def run(self):
        print("Starting connection to {}".format(self.host))
        self.connect()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...