マシンにSSHで接続してアクションを実行するための簡単なpythonpexpectスクリプトを作成しました。次に、このアクションを複数のサーバーに対して実行する必要があります。リストを使用して、マルチスレッドを使用してすべてのサーバーを同時にヒットしています。私の問題は、すべてが同時に実行されているためです。各スレッドは同じサーバー名で実行されています。リストされたサーバーの1つだけを各スレッドで同時に実行する方法はありますか?
#! /usr/bin/python
#Test script
import pexpect
import pxssh
import threading
import datetime
currentdate = datetime.datetime.now()
easterndate = (datetime.datetime.now() + datetime.timedelta(0, 3600))
#list of servers
serverlist = ["025", "089"]
#server number
sn = 0
ssh_new_conn = 'Are you sure you want to continue connecting'
class ThreadClass(threading.Thread):
def run(self):
index = 0
sn = serverlist[index]
print sn
username = '[a username]'
password = '[a password]'
hostname = '%(sn)s.[the rest of the host url]' % locals()
command = "/usr/bin/ssh %(username)s@%(hostname)s " % locals()
index = index + 1
now = datetime.datetime.now()
print command
p = pexpect.spawn(command, timeout=360)
***do some other stuff****
for i in range(len(severlist)):
t = ThreadClass()
t.start()
[更新]子スレッドなどを呼び出す親スレッドでこれを試してみるかもしれませんが、リストまたはある種のワークキューからマルチスレッドが機能するのはいいことですが。