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')