Не удается получить веб-сервер Tornado для потокового кода

1

Просто начав с Tornado, понятия не имею, что я ошибаюсь, но я не могу заставить его вообще нить, вот код, который я тестирую.

    import tornado.ioloop
    import tornado.web
    import time
    from threading import Timer

    class MainHandler(tornado.web.RequestHandler):
        @tornado.web.asynchronous
        def get(self):
            t = Timer(5.0, self.on_response)
            t.start()
            print 'thread started'

        def on_response(self):
            self.write(str(time.time()))
            self.finish()

    application = tornado.web.Application([
        (r"/", MainHandler),
    ])

    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()

Если я запустил это, он работает, но он блокирует весь веб-сервер в течение 5 секунд, поэтому, если я попытаюсь дважды загрузить эту страницу, она будет печатать "поток запущен", подождать 5 секунд, первый браузер будет загрузите, затем снова напечатайте "поток", подождите еще 5 секунд, а затем отправьте второй браузер на страницу, таким образом, в общей сложности 10 секунд.

Даже запуская пример блокировки non- с сайта торнадо, я столкнулся с этой проблемой. Любые идеи?

Пробовал с python 2.6 и 2.7, Tornado 1.2.1 из easy_install.

Теги:
multithreading
tornado

2 ответа

1
Лучший ответ

Код, который вы опубликовали, работает, как и ожидалось для меня, с Python 2.6.1 на Snow Leopard. Вы пробовали тестировать с помощью curl?:

curl --no-buffer localhost:8888 & curl --no-buffer localhost:8888
  • 0
    Странно, если я использую curl, он работает нормально. Но если я использую один и тот же веб-браузер дважды, например, 2 вкладки в Chrome или 2 вкладки в Firefox, я получаю эту проблему. Но одна вкладка в Firefox и одна вкладка в Chrome - это хорошо. Интересно, что вызывает это.
-1
  • Я пробовал с хром на 2 вкладках. это занимает около 10 секунд.
  • Я попытался с IE9 на 2 вкладках. это занимает около 5 секунд.
  • напишите веб-страницу, отправьте 2 запроса AJAX по URL один за другим (с бессмысленными параметрами запроса, чтобы избежать кеша браузера), что занимает около 5 секунд.
  • как вы нашли, завиток работает около 5 секунд.

Таким образом, это может быть поведение браузера/клиента, которое нас путает.

  • 0
    Хотя Торнадо является одним потоком, это цикл событий. Второй запрос, безусловно, может начаться до того, как закончится первый.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню