Skip to content

Instantly share code, notes, and snippets.

@kumagi
Created July 5, 2016 12:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kumagi/3dd9f9dcb6cf98cbf8f1429e9e39f5d2 to your computer and use it in GitHub Desktop.
Save kumagi/3dd9f9dcb6cf98cbf8f1429e9e39f5d2 to your computer and use it in GitHub Desktop.
出力を見てあれこれする
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