Skip to content

Instantly share code, notes, and snippets.

@tkaemming
Last active December 11, 2015 20:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkaemming/7d671c191749ad75912a to your computer and use it in GitHub Desktop.
Save tkaemming/7d671c191749ad75912a to your computer and use it in GitHub Desktop.
script to run n redis servers
import os
import signal
import subprocess
import sys
import tempfile
import time
processes = set()
directory = tempfile.mkdtemp(prefix='redis-', suffix=str(time.time()))
print directory
def log(port, stream):
return open(os.path.join(directory, '{}.{}.log'.format(port, stream)), 'w')
n = int(sys.argv[1])
for i in xrange(n):
port = 6379 + i
args = ('redis-server', '--port', str(port)) + tuple(sys.argv[2:])
process = subprocess.Popen(args, stdout=log(port, 'out'), stderr=log(port, 'err'), preexec_fn=os.setpgrp)
processes.add(process)
print process.pid, ' '.join(args)
try:
signal.pause()
except KeyboardInterrupt:
deadline = time.time() + 10
for process in processes:
process.send_signal(signal.SIGINT)
for process in list(processes):
while process.returncode is None:
if time.time() > deadline:
print process.pid, 'did not stop before deadline'
break
else:
process.poll()
else:
processes.remove(process)
print process.pid, 'stopped'
finally:
for process in processes:
try:
process.kill()
print process.pid, 'killed'
except OSError as error:
if error.errno != 3:
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment