Не в python, а в tornado: ) У python есть еще десяток неблокирующих библиотек с stackless или гринлетами, и еще есть twisted, но вам я его даже предлагать не буду, чтобы предотвратить шок: )
И да, о ужас, иногда надо читать документацию. На node вы наверное не читали, озарение снизошло, что есть такая функция, как setTimeout?
Вот, отлично! А теперь вот это же в топик: ) Ну а рядом можете оставить с обычным sleep, вот тогда будет честно, и статья будет корректна.
Только там ab более детальную картинку отдает, просто время это не совсем показатель, добавьте rps еще.
А результат вполне ожидаемый, да, в два раза обычно и получается на CPython. Посмотрим что принесет нам ласточка, может и выйдет несколько подсократить разрыв.
А вариант со sleep надо запустить под многопоточным сервером, apache там к примеру — чтобы уж совсем к реальному миру приблизиться. Ведь мы понимаем, что когда работает блокирующий код, на http-сервере запускаются несколько экземпляров скрипта. И вот тут время общее выполнения сократится, а rps нам покажет некоторое преимущество неблокирующего подхода.
Не трогайте, он занят, энтропия знаете ли, готовит нам новое уютное гнездышко. А мы тем временем вернемся к вашему тексту, и выведем из него прямые слова — лучшая библиотека на питоне tornado. «Лучшая для чего?» — воскликнет внимательный читатель, ведь он то в курсе, что торнадо и node.js аналоги. Все в курсе, кроме автора этого странного топика, который упирается всеми ороговевшими частями тела, не желая убрать это позорище и прямую подтасовку фактов.
Вы в проекте с гравицапой участия, часом, не принимали? Спешите, вас там ждут!
Выложите честные тесты, как минимум. Только сделайте так — ab -n 10000 -c 300, а то тут даже поперхнуться нечем, на 10 клиентах.
Я просто в теме, а вот вы явно не понимаете, что используете неблокирующий tornado, а пользуетесь при этом синхронной функцией. И я подозреваю, что просто подтасовываете результаты, уж больно упираетесь на очевидное. Впрочем ваш уровень владения темой ясен.
Хотите подобия честного теста — запустите приложение синхронное с потоками, не трогая торнадо, именно так оно и работает в реальном мире. А лучше — скрыть пост и не позориться: )
Вы его просто не знаете. У вас каша в голове, милейший. Хотите полноценный sleep как в тут — сделайте на питоне в twisted reactor.callLater( чего там вам надо).
Или так, чтобы без колбеков, раз уж у вас пунктик. На генераторах, гринлеты тащить влом:
@defer.inlineCallbacks
def kukumsik():
d = defer.Deferred()
reactor.callLater(10,d.callback,"трямсики пришли")
data = yield d
print data
С upstart мирно соседствует? У нас в перемешку debian и ubuntu server, поэтому сейчас опакечиваю в стандартные init скрипты. А так можно было бы про runit задуматься.
Кому новый, а у кого qwerty на смарте.
Кстати мне кажется следующий шаг во всей это экранной пляске, это управление выпуклостью поверхности — хоп, и кнопочки вылезли. А то так, без тактильных ощущений, неудобно. Вот только метод, чтобы сделать «хоп», как то на ум не приходит так сразу: )
from tx_green import make_it_green, wait
def sleep(t):
d = defer.Deferred()
reactor.callLater(t, d.callback,None)
return wait(d)
@make_it_green
def handler(request):
request.write(«heyho!»)
sleep(20)
request.write("!?")
sleep(600)
request.write(«Ищщо тут??»)
request.finish()
И да, о ужас, иногда надо читать документацию. На node вы наверное не читали, озарение снизошло, что есть такая функция, как setTimeout?
Только там ab более детальную картинку отдает, просто время это не совсем показатель, добавьте rps еще.
А результат вполне ожидаемый, да, в два раза обычно и получается на CPython. Посмотрим что принесет нам ласточка, может и выйдет несколько подсократить разрыв.
А вариант со sleep надо запустить под многопоточным сервером, apache там к примеру — чтобы уж совсем к реальному миру приблизиться. Ведь мы понимаем, что когда работает блокирующий код, на http-сервере запускаются несколько экземпляров скрипта. И вот тут время общее выполнения сократится, а rps нам покажет некоторое преимущество неблокирующего подхода.
Вы в проекте с гравицапой участия, часом, не принимали? Спешите, вас там ждут!
Выложите честные тесты, как минимум. Только сделайте так — ab -n 10000 -c 300, а то тут даже поперхнуться нечем, на 10 клиентах.
Хотите подобия честного теста — запустите приложение синхронное с потоками, не трогая торнадо, именно так оно и работает в реальном мире. А лучше — скрыть пост и не позориться: )
Или так, чтобы без колбеков, раз уж у вас пунктик. На генераторах, гринлеты тащить влом:
@defer.inlineCallbacks def kukumsik(): d = defer.Deferred() reactor.callLater(10,d.callback,"трямсики пришли") data = yield d print dataИ больше не лезьте на минное поле без карты.
Кстати мне кажется следующий шаг во всей это экранной пляске, это управление выпуклостью поверхности — хоп, и кнопочки вылезли. А то так, без тактильных ощущений, неудобно. Вот только метод, чтобы сделать «хоп», как то на ум не приходит так сразу: )