Ответ
Tornado — это асинхронный сетевой фреймворк для Python, построенный на неблокирующем вводе-выводе (non-blocking I/O) и event loop. Его основное преимущество — способность эффективно обрабатывать тысячи одновременных подключений с минимальными затратами ресурсов.
Ключевые особенности и сценарии применения:
- Высокая производительность для I/O-bound задач: Идеально подходит для приложений, которые много времени тратят на ожидание ответа от сети, баз данных или внешних API.
- Долгие соединения (Long-polling) и WebSockets: Tornado отлично справляется с поддержанием большого количества открытых соединений, что делает его стандартом для чатов, систем реального времени и push-уведомлений.
- Асинхронный HTTP-клиент: Встроенный
AsyncHTTPClient
позволяет выполнять неблокирующие запросы к другим сервисам, не останавливая основной поток выполнения. - Встроенный веб-сервер: В отличие от фреймворков, работающих через WSGI (Flask, Django), Tornado включает собственный высокопроизводительный HTTP-сервер.
Пример простого веб-сервера:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
async def get(self):
# Асинхронный обработчик
self.write("Hello, Tornado!")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
print("Server is running on http://localhost:8888")
# Запуск event loop
tornado.ioloop.IOLoop.current().start()
Важный аспект: Чтобы сохранить преимущества асинхронности, необходимо избегать любых блокирующих операций (например, стандартных библиотек для работы с БД или файлами) и использовать их асинхронные аналоги (например, motor
для MongoDB или asyncpg
для PostgreSQL).