Python 龙卷风请求超时

Python 龙卷风请求超时,python,tornado,Python,Tornado,我有一个Tornado Web应用程序,它通过本地主机上的TCP端口连接到外部应用程序服务器。有时,如果应用程序服务器响应缓慢,那么即使是对Tornado服务器的请求(不与应用程序服务器通信)也会变慢,因为它们会等待其他请求完成。正确的处理方法是什么 谢谢, Ashish在这种情况下,我通常会在每个请求上启动一个新线程(在处理程序中可能需要500毫秒以上)。为此,您需要使用@asynchronous decorator将您的方法(例如get)声明为异步的 一旦将请求处理程序方法声明为异步,就必须

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

谢谢,
Ashish

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

一旦将请求处理程序方法声明为异步,就必须自己调用self.finish()。否则tornado会在方法执行后调用它自己。看

以下是启动线程并让其处理请求的代码段

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

注意:避免在每个请求处理程序上使用相同的结构。创建线程也会带来开销。

能否显示一些通过TCP连接到应用服务器的代码?我担心你使用的是阻塞式连接,这可以解释为什么Tornado在等待你的应用服务器时无法响应其他请求。使用线程时要小心。特别是,在调用
request.finish
之前,必须使用
IOLoop.add_callback
将控制权转移回事件循环的线程:建议使用Tornado中的线程的方法是使用协程和concurrent.futures.ThreadPoolExecutor。