Python 2.7 如何构建Tornado aynchronous web服务以一次服务单个请求(单例请求服务器)
您好,我正在尝试构建一个基于Tornado的异步python web服务,对于单个请求,通常需要30分钟以上的处理时间 场景 当我调用GET时,它将启动流程,它应该立即响应,就像流程启动一样 在处理期间,如果应用程序收到另一个GET。它应该响应服务器正在处理请求,请稍后再试。(单例请求服务器)Python 2.7 如何构建Tornado aynchronous web服务以一次服务单个请求(单例请求服务器),python-2.7,web-services,asynchronous,tornado,Python 2.7,Web Services,Asynchronous,Tornado,您好,我正在尝试构建一个基于Tornado的异步python web服务,对于单个请求,通常需要30分钟以上的处理时间 场景 当我调用GET时,它将启动流程,它应该立即响应,就像流程启动一样 在处理期间,如果应用程序收到另一个GET。它应该响应服务器正在处理请求,请稍后再试。(单例请求服务器) 你能指导我建造这个吗 像这样的方法应该会奏效: import threading import time from tornado import web from tornado.ioloop impo
你能指导我建造这个吗 像这样的方法应该会奏效:
import threading
import time
from tornado import web
from tornado.ioloop import IOLoop
lock = threading.Lock()
is_processing = False
def background_process():
global is_processing
with lock:
is_processing = True
# You should never call sleep within a Tornado request handler, but it's ok
# on a background thread.
time.sleep(10)
with lock:
is_processing = False
class MyHandler(web.RequestHandler):
def get(self):
with lock:
p = is_processing
if p:
self.write("Please try again")
else:
t = threading.Thread(target=background_process)
t.start()
self.write("Started processing")
def make_app():
return web.Application([
(r"/", MyHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
IOLoop.current().start()
在这段代码中,锁实际上是不必要的,因为“is_processing”是一个简单的布尔值。我已经包括了锁,以防您需要更复杂的数据结构来控制后台处理器,我想向您展示如何锁定对该数据结构的访问