我正在尝试通过python中的不同线程连接到主机但有时会收到错误(执行25次时出现1次) 我见过类似的线程,希望更新pip到8.1.1会解决这个问题,但是没解决。
代码段:
def getkpis(self,cmd,host):
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(host,username='root',look_for_keys=True)
stdin, stdout, stderr = ssh.exec_command(cmd)
paramiko.util.log_to_file("kpiparamiko.log")
output=stdout.read()
appendarray=output.split('\n')
sys.stdin.flush()
ssh.close()
except paramiko.SSHException, e:
print str(e)
看到错误:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 811, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.7/threading.py", line 764, in run
self.__target(*self.__args, **self.__kwargs)
File "/conf/home/smodugu/kpiparse.py", line 56, in getkpis
ssh.connect(host,username='root',look_for_keys=True)
File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 338, in connect
t.start_client()
File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 493, in start_client
raise e
RequirementParseError: Invalid requirement, parse error at "''"
答案 0 :(得分:0)
昨天,我通过使用旧版本的setuptools pip install "setuptools<34"
来解决这个问题,但是今天又出现了问题。通过在排队线程的循环中添加0.1秒的睡眠,我能够绕过它。为什么对paramiko的SSHClient进行多次线程调用会导致pip / setuptools出现此错误,我不知道。
答案 1 :(得分:0)
在paramiko的python2.7版本中,connect函数似乎不是线程安全的
解决方案是使用线程模块中的ProgressJourneyContainerComponent
对象,
Lock
。
然后,使用锁定对象包装对paramiko客户端的from threading import Lock
函数的调用。
例如:
connect
上面的代码使得一次只有一个线程将使用连接,从而解决了该函数不是线程安全的问题。
***我不确定问题是否存在于更新版的paramiko中,值得一看。