Skip to content

Instantly share code, notes, and snippets.

@fopina
Last active March 13, 2016 20:15
Show Gist options
  • Save fopina/d578916592c5665bd028 to your computer and use it in GitHub Desktop.
Save fopina/d578916592c5665bd028 to your computer and use it in GitHub Desktop.
flask versus Django request times (without tweaking)
#!/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
@fopina
Copy link
Author

fopina commented Mar 13, 2016

Not really clear...

Using /var/folders/2_/jkg8hd9s4qd74528tk_rxvpm0000gn/T/tmp.17yc4glg
Setting up virtualenv
Setting up django
Setting up flask
100 requests:
    Flask:  0.418984889984
    Django: 0.450449943542
500 requests:
    Flask:  4.03878808022
    Django: 3.35483908653
1000 requests:
    Flask:  8.65192103386
    Django: 8.70977902412
5000 requests:
    Flask:  39.3884580135
    Django: 40.1150438786
Cleaning up

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment