我正在使用Tornado网络服务器并想了解如何确定服务器是否已闲置一段时间然后重新启动它。
我试图确定self.requests之间的时间差,以确定是否一段时间内没有收到任何请求。但是有更好的方法吗?
答案 0 :(得分:0)
一种简单的方法是使用全局变量来保存最后一个请求的时间戳,并在处理请求时更新它。类似的东西:
#startup initialization code
_last_request = datetime.datetime.now()
#we will use these variables later
interval = datetime.timedelta(seconds=30)
idle_timeout = datetime.timedelta(seconds=1800)
...
#update timestamp in handler(s)
global _last_request
_last_request = datetime.datetime.now()
然后,您将添加一个不时检查_last_request变量的函数:
def idle_check():
if _last_request - datetime.datetime.now() > idle_timeout:
#stop the IOLoop
tornado.ioloop.IOLoop.instance().stop()
else:
#schedule to run again
tornado.ioloop.IOLoop.instance().add_timeout(interval, idle_check)
在启动IOLoop之前,不要忘记调用idle_check函数。