Задача за блокиране на нишка Tornado

Може ли някой да ми помогне да реша този проблем. Ето моят код:

class Handler(RequestHandler):
@asynchronous    
def get(self):
    res = 'result '
    _t = threading.Thread(target=self._thread, args=(res,))
    print _t, time.time()
    _t.start()

def _thread(self, response):
    time.sleep(5)
    IOLoop.instance().add_callback(callback=lambda: self.print_response(response))

def print_response(self, _response):
    self.write(_response)
    self.finish()

application = Application([
     (r'/', Handler),
])
if __name__ == '__main__':
application.listen(8889)
    IOLoop.instance().start()

В браузъра посетете localhost:8889 в един раздел и localhost:8889 в друг: ще видя, че „резултатът“ не се отпечатва във втория раздел, докато първият не приключи, след 5 секунди. Мисля, че бях създаден с 2 нишки паралелна обработка и когато приключих, add_callback води до основен цикъл. Tab2 трябва да има резултати малко след завършване на tab1??? Ако копирам клас Handle в клас Handle1, добавяйки маршрут r'/1', Handle1. Опитайте отново, localhost:8889 и localhost:8889/1 ---> Всичко ще е наред. Всеки може да ми обясни този проблем и как да го реша. Благодаря ти!


person Dwind    schedule 17.03.2014    source източник


Отговори (1)


Не е торнадо, а браузърът. Браузърите не обичат да правят множество заявки за едно и също нещо, така че няма да изпратят втората заявка, докато първата не приключи. Ако използвате два различни браузъра (или различни url адреси), ще видите, че работи.

person Ben Darnell    schedule 17.03.2014
comment
О, така е. Съжалявам, не се сетих за този случай! Благодари ти :) - person Dwind; 17.03.2014