Форум сайта python.su
Всем здравствовать!
Недавно начал разбираться в 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
ab -c 100 -n 5000 127.0.0.1:8080/
Отредактировано john123 (Дек. 23, 2013 10:55:55)
Офлайн
Зачем вам твистед? Запустите через uwsgi, будет больше rps.
Да и вместо web.py можно что-нибудь более “мейнстимовое”.
Офлайн
Ну давайте я буду писать веб-приложение на Python, а вы на Apache, думаю ваши приоритеты очень быстро изменятся и RPS в 7000 не сильно вам поможет.
Запустите 8 копий и на 8-ми ядерном CPU получите 280 RPS. В любом случае, когда начнёте делать что-либо сложнее “Hello world” ваш RPS упадёт (в зависимости от квалификации) до 1 или до 0.1 и никакой framework тут не поможет. Так что на мой взгляд такое тестирование ни о чём.
p.s. У меня ваш код показал 97.69. Linux? Twisted из местной репы ставился? Руками? Сишные зависимости собрались?
..bw
Офлайн
по-моему twisted и tornado не про rps, а про количество соединений, хотя регулярно встречаются типы хотящие ускорить джангу торнадкой.
Офлайн
bwВы случайно на руби(раби-раби) не пишете? А то злой Вы какой-то))
Ну давайте я буду писать веб-приложение на Python, а вы на Apache, думаю ваши приоритеты очень быстро изменятся и RPS в 7000 не сильно вам поможет.
o7412369815963Мейнстримовое в моем случае не требуется, по причине простоты планируемого веб-интерфейса. Тут не будет кучи бизнес-логики, не будет продвинутых ORM и т.д.
Да и вместо web.py можно что-нибудь более “мейнстимовое”.
bismigalisУ меня нет необходимости что-то ускорять. Просто интересно посмотреть на что способен твистед в качестве веб-сервера и можно ли его использовать в таком виде на продакшне. В общем-то я немного расстроен низким RPS и решил обратиться за помощью к более опытным коллегам, чтобы разобраться с этим вопросом, т.к. только начал разбираться с фреймворком, а в документации ничего подобного не нашел.
по-моему twisted и tornado не про rps, а про количество соединений, хотя регулярно встречаются типы хотящие ускорить джангу торнадкой.
Офлайн
Я извиняюсь что сразу не посмотрел код внимательно, голодный был :-).
Сейчас вот поел и думаю, какого рожна там Webpy делает, зачем тогда Twisted?
Сделал более каноничный пример (из официальной, кстати, документации):
# tw2.py # twistd -nol /dev/null web --class=tw2.HelloResource import twisted.web.resource as _twr class HelloResource(_twr.Resource): isLeaf = True def render_GET(self, request): return 'Hello, world!'
Офлайн
bw
Я извиняюсь что сразу не посмотрел код внимательно, голодный был :-).Сейчас вот поел и думаю, какого рожна там Webpy делает, зачем тогда Twisted?Сделал более каноничный пример (из официальной, кстати, документации):
Twisted Web is a web server, and a framework for doing things with the web - although it shares some components in common with frameworks like Django, it's not a “web framework” in the same sense.
Отредактировано john123 (Дек. 22, 2013 23:59:48)
Офлайн
1. Твистед очень быстро равивается, ставить его лучше через pip.
2. Твистед не для wsgi, он просто его умеет .
3. Если нужен именно высокий rps смотрите на nginx + uwsgi соединенные чере unix-сокеты.
4. Как правильно заметил bismigalis, твистед скорее для количества соединений, чем для rps
Офлайн
Благодарю за ответ! Кое-что для меня прояснилось
Также я выяснил (из оффициальной документации, в которой не заметил этой строки), что:
Note that WSGIResource is a multithreaded WSGI container. Like any other WSGI container, you can't do anything asynchronous in your WSGI applications, even though this is a Twisted WSGI container.Выходит в случае с WSGI, Twisted работает в многопоточном режиме и, как я понимаю, причина низкого значения RPS именно в CPython GIL.
Отредактировано john123 (Дек. 25, 2013 15:52:57)
Офлайн
john123
а чего торнадо никто не советует ? https://github.com/facebook/tornado/tree/master/demos/chat
Офлайн