如何构建Tornado aynchronous Web服务以一次处理单个请求(单例请求服务器)



嗨,我正在尝试构建一个基于 Tornado 的异步 python Web 服务,单个请求通常需要 30 多分钟的处理时间。

场景

当我调用 GET 时,它将启动它应该立即响应的进程,就像进程启动一样。

在处理期间,如果应用程序收到另一个 GET .它应该响应服务器正在处理请求,请在一段时间后重试。(单一实例请求服务器)

你能指导我建立这个!!

这样的事情应该可以工作:

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"是一个简单的布尔值。我已经包括了锁,以防您需要更复杂的数据结构来控制后台处理器,我想向您展示如何锁定对该数据结构的访问。

相关内容

  • 没有找到相关文章

最新更新