Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2013 17:44:09

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Tornado Как понять этот код?

Всем привет!

Пытаюсь разобраться с этим интересным фреймворком, но пример 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")

Помогите пожалуйста

Офлайн

#2 Июль 3, 2013 00:07:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Tornado Как понять этот код?

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())
что то типа того…

Офлайн

#3 Июль 3, 2013 02:19:20

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Tornado Как понять этот код?

Значит мы сделали асинхронный http запрос, а затем вместо колбека передали выполнение с функции.
gen.Callback(“key”) кажется должен отдавать функцию, хотя в его реализации я такого не вижу http://www.tornadoweb.org/en/stable/_modules/tornado/gen.html#YieldPoint

Капец, какое там хитросплетения функций



Офлайн

#4 Июль 3, 2013 07:29:35

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Tornado Как понять этот код?

А где была определена переменная `gen`, не очень понял.

Офлайн

#5 Июль 3, 2013 09:52:13

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Tornado Как понять этот код?

Офлайн

#6 Июль 3, 2013 19:00:33

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Tornado Как понять этот код?

> gen.Callback(“key”)

Глянул сорцы. Что значит get.Callback должен отдавать функцию? `get.Callback` это создание instance класса Callback определённого в gen модуле, а дальше торнадо что-то там делает с этим instance.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version