Форум сайта python.su
Всем привет!
Пытаюсь разобраться с этим интересным фреймворком, но пример c документации меня вводит в ступор.
Вот он:
class GenAsyncHandler2(RequestHandler): @asynchronous @gen.coroutine def get(self): http_client = AsyncHTTPClient() http_client.fetch("http://example.com", callback=(yield gen.Callback("key")) response = yield gen.Wait("key") do_something_with_response(response) self.render("template.html")
Офлайн
class GenAsyncHandler2(RequestHandler): @asynchronous # запрос не будет закрыт по завершению ф-ии, нужно вручную вызвать self.finish() @gen.coroutine # запуск ф-ии через генератор т.к. там будут вызовы через yield def get(self): http_client = AsyncHTTPClient() http_client.fetch("http://example.com", callback=(yield gen.Callback("key")) # делаем запрос к сайту и создаем "калбек" с ключом "key" куда вернется управления после запроса response = yield gen.Wait("key") # ждем когда калбек "key" сработает и получаем результат от запроса do_something_with_response(response) # обрабатываем данные self.render("template.html") # отрисовываем шаблон, и видимо он закроет коннект (self.finish())
Офлайн
Значит мы сделали асинхронный http запрос, а затем вместо колбека передали выполнение с функции.
gen.Callback(“key”) кажется должен отдавать функцию, хотя в его реализации я такого не вижу http://www.tornadoweb.org/en/stable/_modules/tornado/gen.html#YieldPoint
Капец, какое там хитросплетения функций
Офлайн
А где была определена переменная `gen`, не очень понял.
Офлайн
Офлайн
> gen.Callback(“key”)
Глянул сорцы. Что значит get.Callback должен отдавать функцию? `get.Callback` это создание instance класса Callback определённого в gen модуле, а дальше торнадо что-то там делает с этим instance.
Офлайн