2012-06-26 1 views
0

Я пишу веб-сервер торнадо, и я стараюсь, чтобы он не блокировал одну функцию.Как вы пишете веб-сервер торнадо, который может принимать сразу несколько клиентов?

class TokenHandler(tornado.web.RequestHandler): 
    @tornado.web.asynchronous 
    def post(self): 
     global t 
     email = self.get_argument("text") 
     thread = MetaToken.ExeThread(email,t,self._on_response) 
     thread.start() 
     #data = t.analyze(email) 


    def _on_response(self,json): 
     self.write(json) 
     self.finish() 

Анализ вызывается в t и может занять несколько секунд. Я в порядке, если другие запросы клиентов могут обрабатываться одновременно. Это работает по большей части, но будет вызывать ошибку при некоторых подключениях, которые поток закрыт.

+0

Трудно отладить вашу программу, не зная, как работает Metatoken.ExeThread. Для чего нужна глобальная переменная 't'? Может ли быть, что последующие запросы, используя одну и ту же глобальную переменную, испортились с обратными вызовами, что привело к «потоковым закрытым» ошибкам? – lbolla

ответ

0

Не используйте нитки с торнадо таким образом!

Если у вас есть тяжелая задача, требующая использования нити - используйте celery. Если задача светлая, просто дайте ее gen.

Смежные вопросы