Skip to content

Instantly share code, notes, and snippets.

@devvesa
Last active August 21, 2020 10:11
Show Gist options
  • Save devvesa/16f6ef54bb2fc502b4ba1e0185ab66bb to your computer and use it in GitHub Desktop.
Save devvesa/16f6ef54bb2fc502b4ba1e0185ab66bb to your computer and use it in GitHub Desktop.
Tornado main loop
from tornado.web import AsyncIOMAinLoop
import asyncio
def make_application(
handlers: Handlers = None,
settings: str = "settings.py",
command_line_parsing: bool = True,
validation_function=None,
) -> tornado.web.Application:
global ENABLE_PROFILER
parse_options(
settings, prefix="tda", command_line_enabled=command_line_parsing, validation_function=validation_function
)
ENABLE_PROFILER = bool(os.environ.get("ENABLE_PROFILER", False))
ppx = options.path_prefix
analytics.write_key = options.segment_project_token
web_handlers = [
(r"{}/".format(ppx), handlers.raml_handler),
....
(
r"{}/harness/?(.*)".format(ppx),
tornado.web.StaticFileHandler,
{"path": harness_root, "default_filename": "index.html"},
),
]
app = tornado.web.Application(web_handlers, debug=options.debug, compress_response=options.compress_response)
app.sentry_client = AsyncSentryClient(options.sentry_dsn)
return app
def main_loop(name: str, handlers: Handlers, settings: str, validation_function=None):
AsyncIOMainLoop().install()
loop = asyncio.get_event_loop()
try:
app = make_application(handlers, settings, validation_function=validation_function)
except ValidationError as error:
logger.error(error)
return
port = options.port
server = tornado.httpserver.HTTPServer(app)
setup_translations()
setup_logging()
print_options()
def signal_handler(*args):
tornado.ioloop.IOLoop.instance().add_callback_from_signal(shutdown, server)
signal.signal(signal.SIGTERM, signal_handler) # catch standard kill
signal.signal(signal.SIGINT, signal_handler) # catch Ctrl+C
server.listen(port)
logger.info("TDA Driver %s: Listening on port::%d", name, port)
loop.run_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment