Tag Archives: python
Python Threading
In order to speed up some of my scripts I’ve implemented threading using python. Some scripts now run in 1/10th the time they used to as a result. Here I will try to illustrate some of the key points, hopefully it will be useful to anyone.
#!/usr/bin/python
import sys
import subprocess
from threading import Thread
class MyThread(Thread):
def __init__(self,server,cmd):
Thread.__init__(self)
self.server = server
self.cmd = cmd
self.status = -1
def run(self):
proc = subprocess.Popen('ssh %s %s' % (self.server,self.cmd),
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
self.stdout, self.stderr = proc.communicate()
servers = ['shell1.example.net','ssh2.mhost.com','examplebox.net']
command = 'uptime'
cmdlist = []
for srv in servers:
run = MyThread(srv,command)
cmdlist.append(run)
run.start()
for c in cmdlist:
c.join()
print "### %s:n%s" % (c.server,c.stdout),
print "## Done"
In my example we loop through servers[] and for each server[] we run the specified command on them, in their own thread! 3 servers in the above example, not a big deal, what if you have 20 servers? 40 servers? huge speed improvement.
The script can be easily extended to say… read the servers list in from a configuration file, or accept the ‘command’ from the command line arguments, (argv[1:]) etc.
Enjoy.
