2
爲了檢查許多服務器上的某個文件的存在,我創建了一個線程類,使用paramiko
執行遠程命令使用ssh。每個線程的結果都被插入到線程安全Queue.Queue
中,並且在所有join()
完成後我讀取它的內容。這是線程的主要部分:Python的paramiko與線程,奇怪的延遲
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秒內完成或失敗。有什麼想法發生在這裏?
謝謝!令人驚訝的是,這確實是一個CPU負載問題..我將使用線程池。 –