Created
July 5, 2016 12:13
-
-
Save kumagi/3dd9f9dcb6cf98cbf8f1429e9e39f5d2 to your computer and use it in GitHub Desktop.
出力を見てあれこれする
This file contains 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 subprocess | |
import sys | |
import os | |
import signal | |
import time | |
import re | |
class JubatusCluster(object): | |
def __init__(self): | |
self.procs = {} | |
def launch_servers(self, jubatype, name, zk, num): | |
procs = [] | |
port = 9199 | |
fail_exp = re.compile("^(E|F).*failed", re.MULTILINE) | |
for x in xrange(num): | |
proc = None | |
succ_exp = re.compile("^I.*" + jubatype + " RPC server startup", re.MULTILINE) | |
while True: | |
proc = subprocess.Popen([jubatype, | |
'-n' , name, | |
'-z' , zk, | |
'-p' , str(port)], | |
stdout = subprocess.PIPE, | |
stderr = subprocess.PIPE, | |
) | |
result = "" | |
success = True | |
while success: | |
result += proc.stderr.read(1) | |
if fail_exp.search(result) != None: | |
proc.kill() | |
proc.wait() | |
success = False | |
if succ_exp.search(result) != None: | |
break | |
if 3000 < len(result): | |
pass#print result | |
if success: | |
break | |
else: | |
print("failed to launch at port " + str(port) + " and try " + str(port - 1)) | |
port -= 1 | |
print("success to launch at port " + str(port)) | |
procs.append((port, proc)) | |
port -= 1 | |
key = (jubatype, name) | |
self.procs.setdefault(key, []) | |
self.procs[key] += procs | |
def kill_server(self, jubatype, name, port): | |
key = (jubatype, name) | |
self.procs.setdefault(key, []) | |
success = False | |
for proc in self.procs[key]: | |
if proc[0] == port: | |
proc[1].kill() | |
return | |
raise Exception("kill_server: [" + jubatype + " " + name + ":" + str(port) + "] not found") | |
def get_name_list(self, jubatype): | |
result = [] | |
for keys in self.procs.keys(): | |
if keys[0] == jubatype: | |
result.append(keys[1]) | |
return result | |
def get_port_list(self, jubatype, name): | |
key = (jubatype, name) | |
self.procs.setdefault(key, []) | |
result = [] | |
for proc in self.procs[key]: | |
result.append(proc[0]) | |
return result | |
def kill_all(self): | |
for keys, procs in self.procs.items(): | |
for proc in procs: | |
proc[1].kill() | |
print("killed " + str(proc[0])) | |
if __name__ == "__main__": | |
jc = JubatusCluster() | |
jc.launch_servers('jubaclassifier', 'hoge', 'localhost:2181', 10) | |
print(jc.get_port_list('jubaclassifier', 'hoge')) | |
jc.kill_all() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment