ファイルからサーバー名、他のファイルからコマンド名を読み取り、すべてのサーバーですべてのコマンドを実行して出力を出力するスクリプトを作成しました。forループの並列処理を利用する
import os, paramiko
cmdlist =[]
with open('command.txt') as f:
for line in f:
cmdlist.append(line.rstrip())
with open('server.txt') as f:
for line in f:
server = line.rstrip()
username, password = ('root', 'password')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, timeout=60)
print "For Server " + server
for y in cmdlist:
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(y)
output1 = ssh_stdout.read()
print ">", output1.rstrip()
ssh.close()
問題は、2番目のforループがシーケンシャルに実行されるため、時間がかかりすぎるということです。サーバーの順序は関係ありません。私は自分のスクリプトがすべてのサーバー上で並列にコマンドを実行し、次にファイルでコンパイルすることを望みます。
私はこれを試しました。私は「fast_process」と呼ばれる機能で、コードの上に置くと、以下のようなコードを記述します。
if __name__ == '__main__':
pool = Pool()
pool.map(fast_process)
しかし、これは私に多くの引数を依頼しているようだが、私の機能は、任意の引数を取りません。私に何ができる?
'pool.map(fast_process、range(times))'?とにかく、正確なトレースバックと完全なコードを投稿することは大いに役立ちます。 – lolopop