Проблема в том, что для импорта paramiko потребуется более 30 секунд.Это происходит "случайно" из тестирования, которое я провел до сих пор.Я запускаю сценарий, и он просто зависает на 30-60 секунд, а затем, в конце концов, продолжит работу с кодом.Я запустил его в режиме отладки, и он доходит до импорта paramiko и не будет переходить к следующей (n) строке в коде.
Сначала я подумал, что, возможно, мои сеансы ssh не закрываются должным образом, но я не думаю, что это так.Сессия ssh определенно закрыта в соответствии с netstat, и это может произойти после нескольких часов неиспользования на хосте.
Вот соответствующая информация:
- У меня есть около 5 сценариев Pythonкоторые импортируют paramiko, и все они имеют эту проблему.
- Иногда я могу без проблем запустить эти сценарии 10 раз (даже одновременно), тогда внезапно ни один из сценариев не будет импортировать paramiko в то время, когда его невозможно импортироватьвсе скрипты просто замирают при импорте (который всегда находится в верхней части моего скрипта).
- В других случаях, когда я просыпаюсь утром, хост, на котором выполняются эти скрипты, не затрагивался в течение 12 часов, ипри первом запуске одного из сценариев импорт paramiko занимает 60 секунд.
- Это происходит на производственных хостах (CentOS 7.5.1804) и лабораторных хостах (CentOS 7.4.1708)
- Это происходит в версиях paramiko 2.2.1, 2.4.1 и 2.4.2.
Мне пришлось вырезать примерно 50 строк из этого кода, но по сути это код, которыйт использует парамико.Имейте в виду, что это используется в 5 различных сценариях, поэтому остальная часть кода полностью различается во всех них.
#!/usr/bin/python
import sys
sys.modules['gssapi'] = None
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(osHost, username='root', password=osPassw, port=22)
except paramiko.SSHException:
print "Connection to OS CLI Failed. Probably wrong password." + osHost
quit()
stdin, stdout, stderr = ssh.exec_command(command)
commandOut = stdout.readlines()
print commandOut
ssh.close()