Esempio n. 1
0
def webserver_serve(app, listener_socket, logfile):
    """Serve app on listener_socket provided.

    This sets up process context, including signal handlers, etc,
    and runs until signalled.

    """
    # create a WSGIServer instance using the listener socket created
    server = WSGIServer(listener_socket, app, log=logfile)
    server.set_spawn(Pool())  # Make WSGIServer manage worker greenlets

    def signal_handler():
        # logger.debug('webserver_serve.signal_handler: Worker caught signal. Shutting down.')
        app.stop_serving(timeout=HALT_TIMEOUT)
        server.stop()

    gevent.signal(signal.SIGUSR1, signal_handler)
    gevent.signal(signal.SIGINT, signal_handler)
    gevent.signal(signal.SIGHUP, signal_handler)
    gevent.signal(signal.SIGTERM, signal_handler)

    on_initialise.fire()
    gevent.spawn_later(1, on_start.fire)

    # serve requests
    try:
        server.serve_forever(stop_timeout=5)
    finally:
        server.close()
        logger.debug('webserver_serve: finished serving')