1.正确关闭服务器的姿势

有时候,服务器的进程因为某种原因被关闭或者自己手动关闭,无法保证内存里的数据正确入库或者仍有cb函数没有执行,这个时候,我们就要确保一切都正确的被执行完毕后,再关闭服务器。
  1. def sig_handler(sig, frame):
  2. logger.warning('Caught signal: %s', sig)
  3. ioloop.IOLoop.instance().add_callback(shutdown)
  4. def shutdown():
  5. io_loop = ioloop.IOLoop.instance()
  6. server.stopFactory() ##自己去做一些处理,保证入库等。
  7. deadline = time.time() + 5
  8. def stop_loop():
  9. now = time.time()
  10. if now < deadline and io_loop._callbacks:
  11. io_loop.add_timeout(now + 1, stop_loop)
  12. else:
  13. io_loop.stop() # 处理完现有的 callback后,结束ioloop循环
  14. stop_loop()
  15. def start():
  16. log_initialize()
  17. global server
  18. server = RPCServer(('localhost', 5700))
  19. server.start()
  20. signal.signal(signal.SIGTERM, sig_handler)
  21. signal.signal(signal.SIGINT, sig_handler)