Browse Source

Don't use shell to launch gunicorn.

INADA Naoki 12 years ago
parent
commit
86a9ea0d17
4 changed files with 60 additions and 40 deletions
  1. 24 16
      bottle/setup.py
  2. 24 20
      django/setup.py
  3. 10 3
      flask/setup.py
  4. 2 1
      wsgi/setup.py

+ 24 - 16
bottle/setup.py

@@ -1,23 +1,31 @@
 import subprocess
 import subprocess
-import sys
 import setup_util
 import setup_util
+import multiprocessing
 import os
 import os
 
 
+bin_dir = os.path.expanduser('~/FrameworkBenchmarks/installs/py2/bin')
+NCPU = multiprocessing.cpu_count()
+
+proc = None
+
+
 def start(args):
 def start(args):
-  setup_util.replace_text("bottle/app.py", "DBHOSTNAME", args.database_host)
-  subprocess.Popen("gunicorn app:app --worker-class=meinheld.gmeinheld.MeinheldWorker -b 0.0.0.0:8080 -w " +
-                   str((args.max_threads * 2)) + " --preload --log-level=critical", shell=True, cwd="bottle")
-  return 0
+    setup_util.replace_text("bottle/app.py", "DBHOSTNAME", args.database_host)
+    proc = subprocess.Popen([
+        bin_dir + "/gunicorn",
+        "app:app",
+        "-k", "meinheld.gmeinheld.MeinheldWorker",
+        "-b", "0.0.0.0:8080",
+        '-w', str(NCPU*2),
+        "--log-level=critical"],
+        cwd="bottle")
+    return 0
 
 
 def stop():
 def stop():
-  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
-  out, err = p.communicate()
-  for line in out.splitlines():
-    if 'gunicorn' in line:
-      try:
-        pid = int(line.split(None, 2)[1])
-        os.kill(pid, 9)
-      except OSError:
-        pass
-  
-  return 0
+    global proc
+    if proc is None:
+        return 0
+    proc.terminate()
+    proc.wait()
+    proc = None
+    return 0

+ 24 - 20
django/setup.py

@@ -1,28 +1,32 @@
 import subprocess
 import subprocess
-import multiprocessing
-import sys
 import setup_util
 import setup_util
+import multiprocessing
 import os
 import os
-from os.path import expanduser
 
 
-home = expanduser("~")
+bin_dir = os.path.expanduser('~/FrameworkBenchmarks/installs/py2/bin')
+NCPU = multiprocessing.cpu_count()
+
+proc = None
+
 
 
 def start(args):
 def start(args):
-  setup_util.replace_text("django/hello/hello/settings.py", "HOST': '.*'", "HOST': '" + args.database_host + "'")
-  setup_util.replace_text("django/hello/hello/settings.py", "\/home\/ubuntu",  home)
-  subprocess.Popen("gunicorn hello.wsgi:application --worker-class=meinheld.gmeinheld.MeinheldWorker -b 0.0.0.0:8080 -w " +
-                   str((multiprocessing.cpu_count() * 3)) + " --log-level=critical", shell=True, cwd="django/hello")
-  return 0
+    setup_util.replace_text("django/hello/hello/settings.py", "HOST': '.*'", "HOST': '" + args.database_host + "'")
+    setup_util.replace_text("django/hello/hello/settings.py", "\/home\/ubuntu",  home)
+    proc = subprocess.Popen([
+        bin_dir + "/gunicorn",
+        "hello.wsgi:application",
+        "-k", "meinheld.gmeinheld.MeinheldWorker",
+        "-b", "0.0.0.0:8080",
+        '-w', str(NCPU*2),
+        "--log-level=critical"],
+        cwd="django/hello")
+    return 0
 
 
 def stop():
 def stop():
-  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
-  out, err = p.communicate()
-  for line in out.splitlines():
-    if 'gunicorn' in line:
-      try:
-        pid = int(line.split(None, 2)[1])
-        os.kill(pid, 9)
-      except OSError:
-        pass
-
-  return 0
+    global proc
+    if proc is None:
+        return 0
+    proc.terminate()
+    proc.wait()
+    proc = None
+    return 0

+ 10 - 3
flask/setup.py

@@ -1,17 +1,24 @@
 import subprocess
 import subprocess
 import setup_util
 import setup_util
+import multiprocessing
 import os
 import os
 
 
 bin_dir = os.path.expanduser('~/FrameworkBenchmarks/installs/py2/bin')
 bin_dir = os.path.expanduser('~/FrameworkBenchmarks/installs/py2/bin')
+NCPU = multiprocessing.cpu_count()
 
 
 proc = None
 proc = None
 
 
 
 
 def start(args):
 def start(args):
     setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
     setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
-    proc = subprocess.Popen(
-        bin_dir + "/gunicorn app:app -k meinheld.gmeinheld.MeinheldWorker -b 0.0.0.0:8080 -w " +
-        str((args.max_threads * 2)) + " --preload --log-level=critical", shell=True, cwd="flask")
+    proc = subprocess.Popen([
+        bin_dir + "/gunicorn",
+        "app:app",
+        "-k", "meinheld.gmeinheld.MeinheldWorker",
+        "-b", "0.0.0.0:8080",
+        '-w', str(NCPU*2),
+        "--log-level=critical"],
+        cwd="flask")
     return 0
     return 0
 
 
 def stop():
 def stop():

+ 2 - 1
wsgi/setup.py

@@ -11,7 +11,8 @@ proc = None
 
 
 def start(args):
 def start(args):
     proc = subprocess.Popen([
     proc = subprocess.Popen([
-        bin_dir + "/gunicorn", "hello:app",
+        bin_dir + "/gunicorn",
+        "hello:app",
         "-k", "meinheld.gmeinheld.MeinheldWorker",
         "-k", "meinheld.gmeinheld.MeinheldWorker",
         "-b", "0.0.0.0:8080",
         "-b", "0.0.0.0:8080",
         '-w', str(NCPU),
         '-w', str(NCPU),