无效的要求,在''''处解析错误

时间:2017-03-13 23:34:17

标签: python multithreading paramiko invalid-argument

我正在尝试通过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 "''"

2 个答案:

答案 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中,值得一看。