Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2013 07:51:31

vlad0405
От:
Зарегистрирован: 2011-07-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по tornado

Читаю книгу по tornado. С асинхронностью более менее понятно.
Но что если я буду использовать tornado в блокирующем стиле. В книге написано, если я запущу
1 инстанс торнадо и запрос будет долго обрабатываться, то остальные в это время буду ждать.
Или например я запущу 4 инстанса, проксирую их через nginx, и если эти 4 инстанса будут заняты обработкой долгих запросов, а запросов будет намного больше, то остальные будут ждать?

Все верно написано в книге или я что-то не понял?
И если все верно - то что делать? Запускать больше инстансов? Или как-то еще можно. Речь идет о блокирующем варианте.



Офлайн

#2 Фев. 16, 2013 10:37:39

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

вопрос по tornado

> Все верно написано в книге или я что-то не понял?
Верно

> И если все верно - то что делать? Запускать больше инстансов?
Это улучшит ситуацию но лучше использовать асинхронные методы вместо блокирующих

> Или как-то еще можно. Речь идет о блокирующем варианте.
Использовать мультипоточный фреймворк вместо асинхронного

Так же можно блокирующие “превратить”/завернуть в асинхронные, например их можно отрабатывать в доп. потоках, но это не хороший путь, можно сделать отдельный процесс по обработке блокирующих запросов и асинхронно с ним работать.

Это так, в общем, все зависит от конкретной задачи.

Офлайн

#3 Фев. 16, 2013 22:18:14

vlad0405
От:
Зарегистрирован: 2011-07-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по tornado

немного поискал различные решения и нашел вот что:

https://github.com/mopub/greenlet-tornado

смысл этой штуки, пишем код в синхронном стиле - если надо посетить какой-то url во время обработки и не заблокировать tornado

можно это как-то приспособить для соединения с базами данных?



Отредактировано vlad0405 (Фев. 16, 2013 22:38:02)

Офлайн

#4 Фев. 17, 2013 15:41:20

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

вопрос по tornado

Офлайн

#5 Фев. 18, 2013 08:47:58

vlad0405
От:
Зарегистрирован: 2011-07-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по tornado

на stackoverflow есть еще несколько топиков по поводу использования gevent совместно с tornado.
Если для небольшого проекта можно и колбеки писать, то для крупного проекта это может быть утомительно.

Кто нибудь использует gevent совместно с tornado чтобы handlers были в синхронном стиле?
И какие минусы от использования gevent можно получить?



Офлайн

#6 Фев. 18, 2013 23:02:13

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

вопрос по tornado

vlad0405
И какие минусы от использования gevent можно получить?
Я особо не вникал, но одну из реализаций видел, там gevent в отдельный поток заворачивается и в основном потоке сам торнадо, т.е. питону придется метаться между потоками, что может негативно повлиять на производительность.

Сам по себе gevent/libevent прикольный, но на счет использования в больших приложениях слышал опасения, мол там полный хак, что не на 100% надежно и если глюканет, то выловить баги будет очень тяжело.

Я рассматривал его как обработчик в виде отдельного процесса к торнадо.

Офлайн

#7 Фев. 19, 2013 09:16:05

vlad0405
От:
Зарегистрирован: 2011-07-14
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по tornado

Значит придется сначала попробовать на мелком проекте.
Всем спасибо за ответы!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version