• Почему программа может не запускаться?

    @IceJOKER
    Web/Android developer
    Научиться разбираться в том, что выдает консоль, если не хватает знаний, то напишите сюда, что он выдает.

    входная точка в java - метод main , если код выше - это единственное, что есть в проекте, то в этом и есть проблема.
    Если не знаете как писать можно же просто посмотреть видеоуроки.
    Да и можно код ошибки вбить в интернет, ни разу не подводил данный способ решения проблемы
    Ответ написан
    2 комментария
  • Как понимать асинхронность в Tornado?

    un1t
    @un1t
    У вас в коде синхронный вызов time.sleep он блочит процесс.

    Асинхронный sleep выглядит примерно так
    def delay(self, seconds):
        return gen.Task(ioloop.IOLoop.instance().add_timeout, time.time() + seconds)


    Пример использования
    @gen.coroutine
    def foo(self):
        yield self.delay(5)
    Ответ написан
    1 комментарий
  • Как понимать асинхронность в Tornado?

    @ykalchevskiy
    tornado.gen.coroutine + yield != асинхронность. Вызовы, которые делаются должны уметь работать асинхронно. Смотрим здесь первый пример:
    class AsyncHandler(RequestHandler):
        @asynchronous
        def get(self):
            http_client = AsyncHTTPClient()
            http_client.fetch("http://example.com",
                              callback=self.on_fetch)
    
        def on_fetch(self, response):
            do_something_with_response(response)
            self.render("template.html")

    Метод fetch объекта класса AsyncHTTPClient -- асинхронный. На это указывает аргумент callback (и название класса, конечно :)). Когда страница будет получена, вызовется _on_fetch. Как и в AJAX.
    Пример ниже на этой же странице -- это переписанная версия того же самого, просто красивее, без лапши коллбеков. Для этого и нужна пара tornado.gen.coroutine + yield.

    Вызов time.sleep(2) блокирует весь ioloop, вместо него можно воспользоваться чем-то типа
    yield tornado.gen.Task(tornado.ioloop.IOLoop.current().add_timeout, time.time() + 2)


    Но даже заменив эту строку, асинхронности не будет заметна. Это связано с ограничениями браузеров: они не умеют одновременно открывать одну и туже вкладку. Поэтому нужно открыть вкладки в разных браузерах.

    Еще одно: декоратор @tornado.web.asynchronous не нужен при использовании @tornado.gen.coroutine.

    Вот эту страничку нужно обязательно прочитать.
    Ответ написан
    Комментировать
  • Как понимать асинхронность в Tornado?

    yield для этого и пишется чтобы весь асинхронный код выглядел и работал как синхринный. Это помогает избежать спагетти. Уберите его если нужно чтобы вызовы были асинхронны. Или вызывайте через IOLoop.instance().add_callback(self.inner)
    Ответ написан
    1 комментарий
  • 12 летка хочет учиться программировать

    creage
    @creage
    Не трогайте его, пусть сам все познает, через пробы и ошибки — от этого оно лучше запомнится, и опыта добавит.
    Ответ написан
    4 комментария