Я пытаюсь понять цель выхода, чтобы включить асинхронные операции в Торнадо, но мне не ясно, почему он не выполняет асинхронную работу. Я пропустил импорт для краткости, но этот код завершен иначе. Вот что я пытаюсь сделать. Когда пользователь делает запрос http, я подбрасываю монету. Если монета поворачивает головы, я сплю 10 секунд и печатаю «Hello Heads». Если монета - это хвосты, я сразу же печатаю «Hello Tails». Когда я делаю скручивание, и он переходит в состояние сна и снова запускаю скручивание, я замечаю, что запрос находится в очереди (даже если монета - это хвосты). Я ожидал, что второй запрос будет обработан в своем собственном потоке и быстро вернет «Hello Tails». Чего мне не хватает?
class MainHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self):
toss = random.choice(['H', 'T'])
print("flipped a coin, got", toss)
if toss == 'H':
response = yield time.sleep(10)
self.write("Hello Heads")
else:
self.write("Hello Tails")
if __name__ == "__main__":
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
tornado.ioloop.IOLoop.current().start()