Просто начав с 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.
Код, который вы опубликовали, работает, как и ожидалось для меня, с Python 2.6.1 на Snow Leopard. Вы пробовали тестировать с помощью curl?:
curl --no-buffer localhost:8888 & curl --no-buffer localhost:8888
Таким образом, это может быть поведение браузера/клиента, которое нас путает.