Last active
March 13, 2016 20:15
-
-
Save fopina/d578916592c5665bd028 to your computer and use it in GitHub Desktop.
flask versus Django request times (without tweaking)
This file contains hidden or 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
#!/bin/bash | |
set -e | |
DIR=$(mktemp -d) | |
function setup_venv() { | |
cd $DIR | |
virtualenv env | |
. env/bin/activate | |
pip install Django==1.9.4 Flask==0.10.1 requests==2.9.1 | |
} | |
function setup_django() { | |
cd $DIR | |
django-admin startproject djtest | |
cd djtest | |
django-admin startapp apptest | |
cat <<EOF > apptest/views.py | |
from django.http import HttpResponse | |
def test(request, number): | |
return HttpResponse(int(number) + 1) | |
EOF | |
cat <<EOF > djtest/urls.py | |
from django.conf.urls import url | |
from apptest import views | |
urlpatterns = [ | |
url(r'^(?P<number>\d+)/$', views.test), | |
] | |
EOF | |
sed -i '' 's/^DEBUG = True/DEBUG = False/' djtest/settings.py | |
sed -i '' 's/^ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \["localhost"\]/' djtest/settings.py | |
} | |
function setup_flask() { | |
cd $DIR | |
cat <<EOF > flasktest.py | |
from flask import Flask, request | |
app = Flask(__name__) | |
@app.route('/<int:number>/') | |
def test(number): | |
return str(number + 1) | |
if __name__ == '__main__': | |
app.run() | |
EOF | |
} | |
function setup_test() { | |
cat <<EOF > $DIR/test.py | |
import requests | |
import timeit | |
import sys | |
def a(): | |
for i in xrange(int(sys.argv[2])): | |
r = requests.get('http://localhost:%s/%d/' % (sys.argv[1], i)) | |
assert r.content == str(i+1) | |
print timeit.timeit(a, number=1) | |
EOF | |
} | |
function cleanup() { | |
rm -r $DIR | |
} | |
function testit() { | |
echo "$1 requests:" | |
echo -en '\tFlask:\t' | |
python test.py 5000 $1 | |
echo -en '\tDjango:\t' | |
python test.py 8000 $1 | |
} | |
function perform_test() { | |
cd $DIR | |
nohup python flasktest.py > /dev/null & | |
PIDF=$! | |
nohup djtest/manage.py runserver > /dev/null & | |
PIDD=$! | |
sleep 1 | |
testit 100 | |
testit 500 | |
testit 1000 | |
testit 5000 | |
kill -9 $PIDF $PIDD > /dev/null 2>&1 | |
} | |
echo "Using $DIR" | |
echo "Setting up virtualenv" | |
setup_venv > /dev/null | |
echo "Setting up django" | |
setup_django > /dev/null | |
echo "Setting up flask" | |
setup_flask > /dev/null | |
setup_test > /dev/null | |
perform_test | |
echo "Cleaning up" | |
cleanup |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Not really clear...