class MainRequestHandler(tornado.web.RequestHandler):
@asynchronous
def post(self):
MainRequestThread(self).start()
class MainRequestThread(threading.Thread):
def __init__(self, request = None, *args, **kwargs):
super(MainRequestThread, self).__init__(*args, **kwargs)
self.request = request
def run(self):
#Do some long processing here...
self.request.finish("Some cool message") # self.request has the self of RequestHandler here
如user2877889所述,您希望使RequestHandlers异步,以确保其他请求不会因为长时间运行的请求而排队。但同时,也要注意的是,如果你现在得到了一个超时,你可以在使它成为非阻塞或异步之后得到它。在
您要做的是在发送请求时增加超时。不管你用什么方式发送请求,都应该有一个设置超时的方法。在jquery中,您可以像this那样执行
在这种情况下,我通常会在每个请求上启动一个新线程(在处理程序中可能需要超过500毫秒)。为此,需要使用@asynchronous decorator将方法(例如get)声明为异步。See here for more details.
一旦将请求处理程序方法声明为异步方法,就必须调用完成自我()你自己。否则tornado会在方法执行后调用它自己。见async networking
下面是一个启动线程并让它处理请求的代码片段。。。在
注意:避免对每个请求处理程序使用相同的结构。创建线程的开销太大。在
相关问题 更多 >
编程相关推荐