Что означает @tornado.web.асинхронный декоратор?

  • Если код не использовал этот декоратор, он не блокирует?
  • Почему это имя является асинхронным, значит, добавляет декоратор, пусть код асинхронный?
  • Почему @tornado.gen всегда используется вместе с @tornado.web.асинхронно вместе?

Ответ 1

@tornado.web.asynchronous предотвращает автоматический вызов RequestHandler self.finish(). Это; это просто означает, что Tornado будет поддерживать соединение открытым, пока вы не вызовете вручную self.finish().

  • Код, не использующий этот декоратор, может блокировать или нет. Использование декоратора никак не изменилось.

  • Как сказал @Steve Peak, вы используете декоратор для асинхронных запросов, например. поиск базы данных.

  • Обновлено для Tornado 3.1+: Если вы используете @gen.coroutine, вам не нужно использовать @asynchronous. Более старый @gen.engine интерфейс по-прежнему требует @asynchronous, я считаю.

Ответ 2

Ответ 3

@tornado.web.asynchronous по существу является просто маркером, который вы добавляете к методу обработчика, например get() или post(), который сообщает фреймворку, что он не должен вызывать finish() автоматически при возврате метода, поскольку он содержит код, который собирается настроить finish() для вызова в более позднее время.