торнадо и код блокировки - PullRequest
3 голосов
/ 10 января 2011

Я пытаюсь отойти от CherryPy для веб-службы, над которой я работаю, и одной из альтернатив, которую я рассматриваю, - Tornado. Теперь большинство моих запросов выглядят на бэкэнде примерно так:

  • получить данные POST

  • посмотреть, есть ли он в кэше (доступ к базе данных)

  • если не сделать несколько HTTP-запросов к какой-либо другой веб-службе, что может занять даже несколько секунд в зависимости от количества запросов

Я продолжаю слышать, что нельзя блокировать главную петлю торнадо; Мне интересно, если весь приведенный выше код выполняется в post() методе RequestHandler, значит ли это, что я блокирую код? И если да, то каков подход к использованию торнадо с вышеуказанными требованиями?

1 Ответ

1 голос
/ 10 января 2011

Tornado поставляется с асинхронным (на самом деле two iirc) http-клиентом ( AsyncHTTPClient ). Используйте его, если вам нужно выполнить дополнительные http-запросы.

Поиск в базе данных также должен выполняться с использованием асинхронного клиента, чтобы не блокировать торнадо ioloop / mainloop. Я знаю, что есть пара специально созданных клиентов баз данных торнадо (например, redis , mongodb ). Библиотека mysql включена в дистрибутив торнадо.

...