- Если код не использовал этот декоратор, он не блокирует?
- Почему это имя является асинхронным, значит, добавляет декоратор, пусть код асинхронный?
- Почему @tornado.gen всегда используется вместе с @tornado.web.асинхронно вместе?
Что означает @tornado.web.асинхронный декоратор?
Ответ 1
@tornado.web.asynchronous предотвращает автоматический вызов RequestHandler self.finish(). Это; это просто означает, что Tornado будет поддерживать соединение открытым, пока вы не вызовете вручную self.finish().
-
Код, не использующий этот декоратор, может блокировать или нет. Использование декоратора никак не изменилось.
-
Как сказал @Steve Peak, вы используете декоратор для асинхронных запросов, например. поиск базы данных.
-
Обновлено для Tornado 3.1+: Если вы используете
@gen.coroutine, вам не нужно использовать@asynchronous. Более старый@gen.engineинтерфейс по-прежнему требует@asynchronous, я считаю.
Ответ 2
-
Ответ здесь: асинхронный и неблокирующий
-
Подумайте об этом так. Когда вам нужно сделать запрос, чтобы сказать базу данных или другой URL-адрес для извлечения данных, вы не хотите блокировать свой торнадо IO. Таким образом,
@tornado.web.asynchronousпозволит IO обрабатывать другие запросы, пока он ожидает загрузки содержимого (например, базы данных или URL-адреса). -
Они являются симулятивными. Вы, скорее всего, будете использовать
@tornado.web.asynchronous.
Ответ 3
@tornado.web.asynchronous по существу является просто маркером, который вы добавляете к методу обработчика, например get() или post(), который сообщает фреймворку, что он не должен вызывать finish() автоматически при возврате метода, поскольку он содержит код, который собирается настроить finish() для вызова в более позднее время.