-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
70 lines (58 loc) · 2.05 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
# Copyright (c) 2014 Asumi Kamikaze Inc.
# Licensed under the MIT License.
# Author: Alejandro M. Bernardis
# Email: alejandro (dot) bernardis (at) asumikamikaze (dot) com
# Created: 02/Feb/2015 08:26
import sys
import signal
import logging
from functools import partial
from tornado import gen, options, ioloop
# imported for option definitions
import options as common_options
@gen.coroutine
def _initializer(**kwargs):
logging.info('--------------')
logging.info('** SERVICES **')
logging.info('--------------')
# TODO(user): Initialize your services here...
logging.info('-')
logging.info('All services initialized')
def run(start_callback, stop_callback=None, **kwargs):
options.parse_command_line()
io_loop = ioloop.IOLoop.current()
def _on_signal(signum, frame):
try:
stop_callback()
except:
io_loop.stop()
signal.signal(signal.SIGHUP, _on_signal)
signal.signal(signal.SIGINT, _on_signal)
signal.signal(signal.SIGQUIT, _on_signal)
signal.signal(signal.SIGTERM, _on_signal)
@gen.coroutine
def _invoke_callback(wrapped_callback, **stts):
yield gen.Task(wrapped_callback, **stts)
shutdown_by_exception = False
try:
level = logging.DEBUG if options.options.debug else logging.INFO
logging.getLogger().setLevel(level)
logging.getLogger().handlers[0].setLevel(level)
io_loop.run_sync(partial(_initializer, **kwargs))
io_loop.run_sync(partial(_invoke_callback, start_callback))
if stop_callback is not None:
func = partial(_invoke_callback, stop_callback)
io_loop.run_sync(func)
except ioloop.TimeoutError:
pass
except Exception, e:
shutdown_by_exception = True
logging.error('Unhandled exception in %s' % sys.argv[0])
logging.error('Error: %s' % e)
if shutdown_by_exception:
sys.exit(1)
if __name__ == '__main__':
from server import start_server, stop_server
run(start_server, stop_server)