龙卷风线程阻塞任务

时间:2014-03-17 08:27:27

标签: multithreading python-2.7 thread-safety 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结果主循环。 Tab1完成后不久Tab2应该有结果??? 如果我将Handle类复制到Handle1类,则添加路由r' / 1',Handle1。再试一次,localhost:8889和localhost:8889/1 --->它会好的。 任何人都可以向我解释这个问题,以及如何解决它。 谢谢!

1 个答案:

答案 0 :(得分:0)

这不是龙卷风,而是浏览器。浏览器不喜欢对同一个事情发出多个请求,因此在第一个请求完成之前它们不会发送第二个请求。如果你使用两个不同的浏览器(或不同的网址),你会发现它有效。