tornado 热更新代码段,热重启
#coding:utf-8
import time
import signal
import logging
import tornado.ioloop
from tornado import ioloop, web, httpserver
from tornado.options import define, parse_command_line, options
MAX_WAIT_SECONDS_BEFORE_SHUTDOWN = 10
def main():
tornado.options.parse_command_line()
#httpserver
app = web.Application()
httpserver = httpserver.HTTPServer(app, xheaders=True)
httpserver.listen(options.port)
def sig_handler(sig, frame):
logging.debug("Caught Signal: %s", sig)
ioloop.IOLoop.instance().add_callback(shutdown)
def shutdown():
logging.debug('Stopping HttpServer...')
httpserver.stop() # no longer accept new http traffic
logging.debug("IOLoop Will be Terminate in %s Seconds...", MAX_WAIT_SECONDS_BEFORE_SHUTDOWN)
instance = ioloop.IOLoop.instance()
deadline = time.time() + MAX_WAIT_SECONDS_BEFORE_SHUTDOWN
#recursion for terminate lOLoop.instance()
def terminate():
now = time.time()
if now < deadline and (instance._callback or instance._timeouts):
instance.add_timeout(now+1, terminate)
else:
instance.stop() # After process all _callback and _timeouts, break TOLoop.instance
logging.debug('Shutdown... ')
#process recursion
terminate()
#signal register
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
#start ioloop for socket, infinite before catch signal
ioloop.IOLoop.instance().start ()
logging.debug('Exit...')
if __name__ == '__main__':
main()
supervisor命令:
重启脚本restart.sh
#逐个启动MyWeb每个端口进程,不中断服务
for i in "8081 8082 8083 8084":
do
/opt/bin/supervisorctl /opt/conf/supervisor.conf restart MyWeb:$i;
done
#重新加载nginx的配置
/opt/sbin/nginx /opt/conf/nginx.conf -s reload;