Last active
December 11, 2015 20:40
-
-
Save tkaemming/7d671c191749ad75912a to your computer and use it in GitHub Desktop.
script to run n redis servers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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