首页 > 代码库 > tornado 信号处理
tornado 信号处理
一般情况下,对于线上的程序,我们是不能采取kill -9 来杀掉进程的
因为程序可能有未处理完的程序,如果贸然采取kill -9可能会导致数据不一致
如果需要关闭程序怎么办呢,一般情况下我们采取信号技术
当我们按ctrl+c时程序会收到SIGINT信号
当发送kill pid指令时程序会收到SIGTERM信号
程序在收到这些信号后,我们需要做个处理,比如关闭监听端口不再接收新请求
然后等待60秒(等待时间根据自己的需要)用于未完成的处理。
等待结束后再关闭程序
我们以tornado为例,示例代码如下:
123456789101112131415161718192021222324252627282930 | def sig_handler(sig, frame): logging.warning(‘Caught signal: %s‘, sig) tornado.ioloop.IOLoop.instance().add_callback(shutdown) def shutdown(): logging.info(‘Stopping http server‘) http_server.stop() logging.info(‘Will Shutdown in %s seconds ...‘, 60) io_loop = tornado.ioloop.IOLoop.instance() deadline = time.time() + 60 def stop_loop(): now = time.time() if now < deadline and (io_loop._callbacks or io_loop._timeouts): io_loop.add_timeout(now + 1, stop_loop) else: io_loop.stop() logging.info(‘Shutdown‘) stop_loop() if __name__ == "__main__": tornado.options.parse_command_line() http_server = tornado.httpserver.HTTPServer(Application()) http_server.listen(options.port) logging.info(‘start listen on port: %s‘, options.port) signal.signal(signal.SIGTERM, sig_handler) signal.signal(signal.SIGINT, sig_handler) tornado.ioloop.IOLoop.instance().start() |
tornado 信号处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。