龙卷风请求超时

2024-05-20 02:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Tornado Web应用程序,它连接到本地主机上TCP端口上的外部应用程序服务器。有时,如果应用程序服务器响应缓慢,那么即使是对Tornado服务器的请求(不与应用程序服务器通信)也会变慢,因为它们会被等待其他请求完成。正确的处理方法是什么?在

谢谢, 灰烬


Tags: 方法端口服务器web应用程序tornadotcp灰烬
2条回答

如user2877889所述,您希望使RequestHandlers异步,以确保其他请求不会因为长时间运行的请求而排队。但同时,也要注意的是,如果你现在得到了一个超时,你可以在使它成为非阻塞或异步之后得到它。在

您要做的是在发送请求时增加超时。不管你用什么方式发送请求,都应该有一个设置超时的方法。在jquery中,您可以像this那样执行

在这种情况下,我通常会在每个请求上启动一个新线程(在处理程序中可能需要超过500毫秒)。为此,需要使用@asynchronous decorator将方法(例如get)声明为异步。See here for more details.

一旦将请求处理程序方法声明为异步方法,就必须调用完成自我()你自己。否则tornado会在方法执行后调用它自己。见async networking

下面是一个启动线程并让它处理请求的代码片段。。。在

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

注意:避免对每个请求处理程序使用相同的结构。创建线程的开销太大。在

相关问题 更多 >