Скрипт Python не завершается, потому что зависает SSHTunnelForwarder

#mysql #python-3.x #ssh-tunnel

#mysql #python-3.x #ssh-туннель

Вопрос:

Python: 3.8.5 sshtunnel:0.2.1 mysqlclient: 1.4.6 mysql-connector: 2.2.9

Я использую SSHTunnelForwarder для извлечения данных из базы данных Mysql. Вот скрипт, который я использую для подключения через SSH к БД:

 elif self._remote == 1:
  with SSHTunnelForwarder(
    (self._host, 22),
    ssh_password = self._ssh_password,
    ssh_username = self._ssh_login,
    remote_bind_address = (self._remote_bind_address, 3306)) as server:
    print('Connection:',server.local_bind_address)
    cnx = MySQLdb.connect(host = '127.0.0.1',
                          port = server.local_bind_port,
                          user = self._db_user,
                          passwd = self._db_password,
                          db = self._db_name)
    cursor = cnx.cursor()
    res = pd.read_sql(request, con = cnx)
    cursor.close()
    cnx.close()
 

Пример запроса может быть в следующей форме:

 request = 'SELECT * FROM conjunctions AS c LEFT JOIN events AS e ON e.eventId=c.eventId ORDER BY e.eventId;'
 

Скрипт возвращает мне действительный ответ, но не завершает работу в оболочке.
threading.enumerate() выведет это:

 [<_MainThread(MainThread, started 139701046208320)>, <paramiko.Transport at 0x74850ac0 (unconnected)>, <paramiko.Transport at 0xae9e4e80 (unconnected)>]
 

Я обнаружил, что эта проблема связана с той же проблемой, однако предлагаемые решения для меня не работают.
Закрытие туннеля вручную с помощью a server.stop() не работает.
Добавление ssh_server.daemon_forward_servers = True , как предложено в упомянутой выше проблеме, не работает.

Чаще всего эта проблема возникает примерно 4/5 раз при запуске скрипта.

Любая помощь, чтобы понять, что происходит, была бы весьма признательна.

Спасибо.