Проблема, которую я хотел бы решить, заключается в следующем:
- создание 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()