Недавно начал разбираться в twisted.web с целью использования его как веб-сервера.
В качестве фреймворка взял web.py. Чтобы состыковать web.py и twisted, использую WSGI.
Решив погонять тесты с помощью ab и httperf, увидел удручающие результаты: 30-40 rps, в то время как apache, запущенный с гигантским приложением на CodeIgniter, выдает 180-200 в httperf и около 7000 в ab.
Приложение на twisted такое:
#!/usr/bin/python # encoding: utf-8 from twisted.web.wsgi import WSGIResource from twisted.internet import reactor import web urls = ('/', 'Index') class Index: def GET(self): return 'Hello, world!' application = web.application(urls, globals()).wsgifunc() resource = WSGIResource(reactor, reactor.getThreadPool(), application)
Запускаю так:
twistd web --wsgi tw.application --logfile=/dev/null
Т.е., как видно, пока что это обыкновенный хэловорлд. Но даже на таком коде, количество RPS рекордно мало.
Запускаю тест:
ab -c 100 -n 5000 127.0.0.1:8080/
В httperf, в общем-то, такая же картина.
Вопрос - что я делаю не так? Может быть стоит использовать какой-то нестандартный реактор для WSGI? Или может быть надо настроить какие-то параметры типа Thread_pool и т.д.?