【发布时间】:2011-07-26 11:10:49
【问题描述】:
为了检查多个服务器上某个文件是否存在,我创建了一个线程类,它使用paramiko 来使用 ssh 执行远程命令。每个线程的结果被插入到一个线程安全的Queue.Queue 中,我在所有join()s 完成后读取它的内容。这是线程的主要部分:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect(self.server, username='linqmap', timeout=5)
stdin, stdout, stderr = client.exec_command('my_command')
这个解决方案效果很好,但是有一个奇怪的行为引起了我的注意。该线程记录其__init__ 时间:
def __init__(self, server, queue, lock):
...
self.start_time=datetime.datetime.now()
...
及其完成时间(结果插入队列的时间):
def _report(self, message, status):
duration=datetime.datetime.now()-self.start_time
...
self.queue.put( (self.server, duration, message, status) )
问题是所有线程的持续时间都非常相似。对于少量 (~5) 线程,大约需要 3 秒。对于较大的数字(~100),大约是 30 秒。
由于连接超时 5 秒,我假设所有线程要么在 5 秒内完成,要么失败。知道这里发生了什么吗?
【问题讨论】:
标签: python multithreading paramiko