It is hard to do an apples to apples comparison. For example in Flask,
unless you ask for it explicitly there is no session management.
Basically Flask only gives you routing. web2py instead always assumes
you want sessions so it parses the http header, looks for session
cookies and assignes you a uuid, even if (in this example) there is no
actual session to be saved.

If you use sessions you will find that Flask is still faster then
web2py. That is because Flask stores sessions in cookies which is
faster) and web2py stored them db (which is slower by guarantees
session integrity, which Flask does not).

The difference reduces once you have a db connection. DAL is faster
than SQLAlchemy but the real bottle neck is always the db IO.

So I agree that Flask is faster but that much in real life apps, and
the difference is washed away in db driven apps.

Anyway, if you make more tests please share them with us.

Massimo




On Mar 25, 11:46 am, VP <vtp2...@gmail.com> wrote:
> I saw a discussion on a new framework at reddit.  In this discussion,
> someone ran a hello world test on this framework.  He used Flask
> configured with ngnix.  I assume that this is a good set up as the
> person appears to know what he's doing.   This is on a VPS 512
> Slicehost.
>
> Seeing this, I thought it'd be interesting to look at a barebone
> web2py's hello world.  I'm on a 768 VPS, which is similar to Slicehost
> 512.  I think Slicehost uses Zen and is more expensive.  I'm with
> Ramhost, which I like a lot.  I have Apache, which is presumably
> slower than nginx.
>
> My barebone hello world is totally stripped down.  Controller has only
> 1 function.  No model.  Compiled.  Here's my result.
>
> Server Software:        Apache/2.2.16
> Server Port:            80
>
> Document Path:          /hello/default/index
> Document Length:        87 bytes
>
> Concurrency Level:      100
> Time taken for tests:   7.001 seconds
> Complete requests:      2416
> Failed requests:        0
> Write errors:           0
> Total transferred:      1181357 bytes
> HTML transferred:       210453 bytes
> Requests per second:    345.11 [#/sec] (mean)
> Time per request:       289.759 [ms] (mean)
> Time per request:       2.898 [ms] (mean, across all concurrent
> requests)
> Transfer rate:          164.80 [Kbytes/sec] received
>
> Connection Times (ms)
>               min  mean[+/-sd] median   max
> Connect:       52   68  11.0     65     144
> Processing:    60  219 163.3    150     745
> Waiting:       56  210 162.7    136     731
> Total:        131  287 163.4    217     810
>
> Percentage of the requests served within a certain time (ms)
>   50%    217
>   66%    298
>   75%    380
>   80%    443
>   90%    582
>   95%    649
>   98%    668
>   99%    711
>  100%    810 (longest request)
>
> ====
>
> Observation:
>
> Time per request for across connections is about 3ms for web2py, and
> 0.3ms for Flask.   You can say Flask is 10x faster or you can say it's
> 3ms faster; it's pennies.
>
> I would be very interested in a more serious comparison.  Let's say a
> blog with authentication, forms,  texts and images.  One uses web2py;
> the other Flask + SQLAlchemy.   The comparison metric will be:
>
> (1) Efficiency/throughput: e.g. using Apache Benchmark
>
> (2) Expressiveness: concise and understandable expression of codes.
>
> I'm predicting that web2py will win (2), if DAL is faster than
> SQLAlchemy.  And depending on who you're asking, web2py will win (1)
> as well.
>
> This test will be very much needed because it will put things in
> perspective.  Real world apps are not "hello-worlds"'s.  Let 's
> compare non-trivial apps in meaningful ways.
>
> =============
> Reference:
> Hello world on Flask + 
> ngnixhttp://www.reddit.com/r/Python/comments/gaegq/meinheld_is_a_highperfo...
> =============
> Ok, quick benchmark on my Linode 512:
>
> flasktest.py
>
> from flask import Flask, request, g, redirect, url_for, \
>      abort, render_template, flash
> app = Flask(__name__)
>
> @app.route('/')
> def hello_world():
>     return "PONG"
>
> if __name__ == '__main__':
>     app.run()
>
> Running gunicorn with gevent worker, behind nginx:
>
> Server Software:        nginx/0.9.6
> Server Hostname:        flasktest.0xf.nl
> Server Port:            80
>
> Document Path:          /
> Document Length:        172 bytes
>
> Concurrency Level:      100
> Time taken for tests:   6.494 seconds
> Complete requests:      20000
> Failed requests:        19859
>    (Connect: 0, Receive: 0, Length: 19859, Exceptions: 0)
> Write errors:           0
> Non-2xx responses:      141
> Total transferred:      3203124 bytes
> HTML transferred:       103688 bytes
> Requests per second:    3079.93 [#/sec] (mean)
> Time per request:       32.468 [ms] (mean)
> Time per request:       0.325 [ms] (mean, across all concurrent
> requests)
> Transfer rate:          481.71 [Kbytes/sec] received
>
> Connection Times (ms)
>               min  mean[+/-sd] median   max
> Connect:        0    4   4.4      3      22
> Processing:     5   28  11.0     27     132
> Waiting:        1   26  11.0     25     132
> Total:          9   32  10.1     31     137
>
> Percentage of the requests served within a certain time (ms)
>   50%     31
>   66%     35
>   75%     37
>   80%     38
>   90%     42
>   95%     47
>   98%     52
>   99%     57
>  100%    137 (longest request)
> james@li140-209:/var/www/scripts$

Reply via email to