Whi*_*rse 18 python ssh paramiko
下面的代码通过SSH在一台机器上运行grep并打印结果:
import sys, os, string
import paramiko
cmd = "grep -h 'king' /opt/data/horror_20100810*"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.3.10', username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()
print stdout.readlines()
Run Code Online (Sandbox Code Playgroud)
我怎样才能同时打磨五台机器(这样我没有大的延迟),而不是将所有这些都放在五个变量中并将它们全部打印出来.
Ale*_*lli 34
您需要将调用放入单独的线程(或进程,但这可能是过度的),这反过来要求代码在一个函数中(无论如何这是一个好主意:在模块顶部没有大量代码水平).
例如:
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()
Run Code Online (Sandbox Code Playgroud)
如果你有超过五个主机,我建议使用"线程池"架构和工作单元队列.但是,对于短短五年,这是简单的坚持走"专用线"模式(尤其是因为在标准库中没有线程池,所以你需要一个第三方软件包像线程池 ......还是有很多微妙的习俗你自己的代码当然;-).
| 归档时间: |
|
| 查看次数: |
28419 次 |
| 最近记录: |