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

有时候,服务器的进程因为某种原因被关闭或者自己手动关闭,无法保证内存里的数据正确入库或者仍有cb函数没有执行,这个时候,我们就要确保一切都正确的被执行完毕后,再关闭服务器。
def sig_handler(sig, frame):
    logger.warning('Caught signal: %s', sig)
    ioloop.IOLoop.instance().add_callback(shutdown)

def shutdown():
    io_loop = ioloop.IOLoop.instance()
    server.stopFactory() ##自己去做一些处理,保证入库等。

    deadline = time.time() + 5

    def stop_loop():
        now = time.time()
        if now < deadline and io_loop._callbacks:
            io_loop.add_timeout(now + 1, stop_loop)
        else:
            io_loop.stop() # 处理完现有的 callback后,结束ioloop循环
    stop_loop()

def start():
    log_initialize()
    global server
    server = RPCServer(('localhost', 5700))
    server.start()

    signal.signal(signal.SIGTERM, sig_handler)
    signal.signal(signal.SIGINT, sig_handler)

results matching ""

    No results matching ""