2009/9/13 Antoni Aloy <antoni.a...@gmail.com>:
> 2009/9/13 Bret Taylor <btay...@gmail.com>:
>>
>> I am one of the authors of Tornado (http://www.tornadoweb.org/), the
>> web server/framework we built at FriendFeed that we open sourced last
>> week (see http://bret.appspot.com/entry/tornado-web-server).
>>
>> The underlying non-blocking HTTP server is fairly high performance, so
>> I have been working this weekend to get other frameworks like Django
>> and web.py working on Tornado's server so existing projects could
>> potentially benefit from the performance. To that end, I just checked
>> in change to Tornado that enables you to run any WSGI-compatible
>> framework on Tornado's HTTP server. You can find it in a class called
>> WSGIContainer in our wsgi.py:
>>
>> http://github.com/facebook/tornado/blob/master/tornado/wsgi.py#L188
>>
>> You will have to check out Tornado from github to get the change; it
>> is not yet included in the tarball distribution.
>>
>> Here is a template for running a Django app on Tornado's server using
>> the module:
>>
>>    import django.core.handlers.wsgi
>>    import os
>>    import tornado.httpserver
>>    import tornado.ioloop
>>    import tornado.wsgi
>>
>>    def main():
>>        os.environ["DJANGO_SETTINGS_MODULE"] = 'myapp.settings'
>>        application = django.core.handlers.wsgi.WSGIHandler()
>>        container = tornado.wsgi.WSGIContainer(application)
>>        http_server = tornado.httpserver.HTTPServer(container)
>>        http_server.listen(8888)
>>        tornado.ioloop.IOLoop.instance().start()
>>
>>    if __name__ == "__main__":
>>        main()
>>
>>
>> I have only done very basic tests using the new module, so if any of
>> you are interested and start using Tornado with your Django projects,
>> please let us know what bugs you find so we can fix them. Any and all
>> feedback is appreciated.
>>
>
> We're acually using Cherrypy, so it would be quite easy to test and
> check the performance. We'll post any issues we found.
>
>
Just few numbers:

ab -c 10 -t 60 http://localhost:8088/
Executing Django with Cherrypy with 3 threads on a PPC Computer 2 CPU 2 GHz

With Tornado WSGI:
ab -c 10 -t 60 http://localhost:8888/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Finished 25022 requests


Server Software:        TornadoServer/0.1
Server Hostname:        localhost
Server Port:            8888

Document Path:          /
Document Length:        266 bytes

Concurrency Level:      10
Time taken for tests:   60.019 seconds
Complete requests:      25022
Failed requests:        0
Write errors:           0
Total transferred:      9333206 bytes
HTML transferred:       6655852 bytes
Requests per second:    416.90 [#/sec] (mean)
Time per request:       23.987 [ms] (mean)
Time per request:       2.399 [ms] (mean, across all concurrent requests)
Transfer rate:          151.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       6
Processing:     3   24   1.9     24      68
Waiting:        0   24   1.9     23      68
Total:          7   24   1.9     24      68

Percentage of the requests served within a certain time (ms)
  50%     24
  66%     24
  75%     24
  80%     24
  90%     25
  95%     26
  98%     27
  99%     28
 100%     68 (longest request)


Using CherryPy with 3 threads (the best configuration for my computer
in my tests)


ab -c 10 -t 60 http://localhost:8088/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Finished 21500 requests


Server Software:        CherryPy/3.0.3
Server Hostname:        localhost
Server Port:            8088

Document Path:          /
Document Length:        266 bytes

Concurrency Level:      10
Time taken for tests:   60.001 seconds
Complete requests:      21500
Failed requests:        0
Write errors:           0
Total transferred:      8299000 bytes
HTML transferred:       5719000 bytes
Requests per second:    358.33 [#/sec] (mean)
Time per request:       27.907 [ms] (mean)
Time per request:       2.791 [ms] (mean, across all concurrent requests)
Transfer rate:          135.07 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0  20.5      0    2999
Processing:     3   28  10.7     26     413
Waiting:        3   26  10.3     24     412
Total:          3   28  23.1     26    3031

Percentage of the requests served within a certain time (ms)
  50%     26
  66%     28
  75%     30
  80%     31
  90%     34
  95%     38
  98%     43
  99%     48
 100%   3031 (longest request)


To sumarize:

416.90 req/s for Tornado WSGI
358.33 req/s for CherryPy

Tornado makes one CPU up to 100% nearly at the same time of the ab
execution, Cherrypy takes longer. Perhaps some CherryPy guru could
configure it better.

The code is at

http://appfusedjango.googlecode.com/svn/trunk/hello_world   for the
CherryPy (django-cerise) version
http://appfusedjango.googlecode.com/svn/trunk/hello_tornado for the
tornado version (includes tornado wsgi)

This is a sample helloword project with just the essential to run.
It's the same code I used to compare with PHP frameworks

http://trespams.com/2009/05/10/django-vs-php-framewors/

-- 
Antoni Aloy López
Blog: http://trespams.com
Site: http://apsl.net

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to