Вам нужно будет помещать вызовы в отдельные потоки (или процессы, но это было бы излишним), что, в свою очередь, требует, чтобы код был в функции (что в любом случае является хорошей идеей: не иметь значительного кода вверхний уровень модуля).
Например:
import sys, os, string, threading
import paramiko
cmd = "grep -h 'king' /opt/data/horror_20100810*"
outlock = threading.Lock()
def workon(host):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()
with outlock:
print stdout.readlines()
def main():
hosts = ['10.10.3.10', '10.10.4.12', '10.10.2.15', ] # etc
threads = []
for h in hosts:
t = threading.Thread(target=workon, args=(h,))
t.start()
threads.append(t)
for t in threads:
t.join()
main()
Если бы у вас было много более пяти хостов, я бы рекомендовал вместо этого использовать архитектуру «пула потоков» и очередь рабочих блоков.,Но всего за пять проще придерживаться модели «выделенного потока» (тем более что в стандартной библиотеке нет пула потоков, поэтому вам потребуется сторонний пакет, такой как threadpool ...или много тонкого собственного кода, конечно; -).