Browse Source

wsgi: Add plaintext test.

INADA Naoki 12 years ago
parent
commit
90880d999c
3 changed files with 42 additions and 23 deletions
  1. 2 1
      wsgi/benchmark_config
  2. 26 5
      wsgi/hello.py
  3. 14 17
      wsgi/setup.py

+ 2 - 1
wsgi/benchmark_config

@@ -4,8 +4,9 @@
     "default": {
       "setup_file": "setup",
       "json_url": "/json",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "sort": 29
     }
   }]
-}
+}

+ 26 - 5
wsgi/hello.py

@@ -1,14 +1,35 @@
 import ujson
+import sys
 
+if sys.version_info[0] == 3:
+    def encode(obj):
+        return ujson.dumps(obj).encode('utf-8')
+else:
+    def encode(obj):
+        return ujson.dumps(obj)
 
-def app(environ, start_response):
-    response = {
-      "message": "Hello, World!"
-    }
-    data = ujson.dumps(response)
+def json(environ, start_response):
+    response = {"message": "Hello, World!"}
+    data = encode(response)
+    response_headers = [
+        ('Content-type', 'application/json'),
+        ('Content-Length', str(len(data)))
+    ]
+    start_response('200 OK', response_headers)
+    return [data]
+
+def plaintext(environ, start_response):
+    data = b"Hello, World!"
     response_headers = [
         ('Content-type', 'text/plain'),
         ('Content-Length', str(len(data)))
     ]
     start_response('200 OK', response_headers)
     return [data]
+
+def app(environ, start_response):
+    path = environ['PATH_INFO']
+    if path.startswith('/json'):
+        return json(environ, start_response)
+    else:
+        return plaintext(environ, start_response)

+ 14 - 17
wsgi/setup.py

@@ -1,22 +1,19 @@
-
 import subprocess
-import sys
 import setup_util
-import os
+
+proc = None
+
 
 def start(args):
-  subprocess.Popen('gunicorn hello:app --worker-class="egg:meinheld#gunicorn_worker" -b 0.0.0.0:8080 -w '
-                   + str((args.max_threads * 2)) + " --log-level=critical", shell=True, cwd="wsgi")
-  return 0
-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
+    proc = subprocess.Popen(
+        "gunicorn hello:app -k meinheld.gmeinheld.MeinheldWorker -b 0.0.0.0:8080 -w " +
+        str((args.max_threads * 2)) + " --preload --log-level=critical", shell=True, cwd="wsgi")
+    return 0
 
-  return 0
+def stop():
+    global proc
+    if proc is None:
+        return 0
+    proc.terminate()
+    proc = None
+    return 0