Browse Source

Add flask-pypy

INADA Naoki 12 years ago
parent
commit
71c144ac02
5 changed files with 56 additions and 1 deletions
  1. 8 1
      flask/app.py
  2. 8 0
      flask/benchmark_config
  3. 14 0
      flask/run_pypy.py
  4. 21 0
      flask/setup_pypy.py
  5. 5 0
      installer.py

+ 8 - 1
flask/app.py

@@ -3,8 +3,15 @@ from flask.ext.sqlalchemy import SQLAlchemy
 from sqlalchemy import create_engine
 from random import randint
 
+try:
+    import MySQLdb
+    mysql_schema = "mysql:"
+except ImportError:
+    mysql_schema = "mysql+pymysql:"
+
+
 app = Flask(__name__)
-app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://benchmarkdbuser:benchmarkdbpass@DBHOSTNAME:3306/hello_world'
+app.config['SQLALCHEMY_DATABASE_URI'] = mysql_schema + '//benchmarkdbuser:benchmarkdbpass@localhost:3306/hello_world'
 db = SQLAlchemy(app)
 dbraw_engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
 

+ 8 - 0
flask/benchmark_config

@@ -15,6 +15,14 @@
       "query_url": "/dbraw?queries=",
       "port": 8080,
       "sort": 84
+    },
+    "pypy": {
+      "setup_file": "setup_pypy",
+      "json_url": "/json",
+      "db_url": "/dbs",
+      "query_url": "/db?queries=",
+      "port": 8080,
+      "sort": 107
     }
   }]
 }

+ 14 - 0
flask/run_pypy.py

@@ -0,0 +1,14 @@
+import tornado.options
+import tornado.wsgi
+import tornado.httpserver
+from tornado.options import options
+
+tornado.options.define('port', default=8080, type=int, help=("Server port"))
+tornado.options.parse_command_line()
+
+import app
+container = tornado.wsgi.WSGIContainer(app.app)
+server = tornado.httpserver.HTTPServer(container)
+server.bind(options.port)
+server.start(16)
+tornado.ioloop.IOLoop.instance().start()

+ 21 - 0
flask/setup_pypy.py

@@ -0,0 +1,21 @@
+import subprocess
+import sys
+import setup_util
+import os
+
+def start(args):
+  setup_util.replace_text("flask/app.py", "DBHOSTNAME", args.database_host)
+  subprocess.Popen("~/FrameworkBenchmarks/installs/pypy-2.0/bin/pypy run_pypy.py --port=8080 --logging=error", shell=True, cwd="flask")
+  return 0
+
+def stop():
+  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+  out, err = p.communicate()
+  for line in out.splitlines():
+    if 'pypy' in line:
+      try:
+        pid = int(line.split(None, 2)[1])
+        os.kill(pid, 9)
+      except OSError:
+        pass
+  return 0

+ 5 - 0
installer.py

@@ -46,12 +46,17 @@ class Installer:
     # Python
     #
 
+    self.__run_command("curl https://bitbucket.org/pypy/pypy/downloads/pypy-2.0-linux64.tar.bz2 | tar xvz")
     self.__run_command("curl http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz | tar xvz")
     self.__run_command("./configure", cwd="Python-2.7.4")
+    self.__run_command("make -j", cwd="Python-2.7.4")
     self.__run_command("sudo make install", cwd="Python-2.7.4")
     self.__run_command("curl https://pypi.python.org/packages/source/d/distribute/distribute-0.6.38.tar.gz | tar xvz")
+    # run pypy before python. (`setup.py install` fails after `sudo setup.py install`)
+    self.__run_command("../pypy-2.0/bin/pypy setup.py install", cwd="distribute-0.6.38")
     self.__run_command("sudo python setup.py install", cwd="distribute-0.6.38")
     self.__run_command("curl https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz")
+    self.__run_command("../pypy-2.0/bin/pypy setup.py install", cwd="pip-1.3.1")
     self.__run_command("sudo python setup.py install", cwd="pip-1.3.1")
     self.__run_command("sudo pip install MySQL-python==1.2.4")
     self.__run_command("sudo pip install simplejson==3.0.7")