Threading pt 1
[ric-plt/a1.git] / a1 / run.py
1 """
2 A1 entrypoint
3 """
4 # ==================================================================================
5 #       Copyright (c) 2019 Nokia
6 #       Copyright (c) 2018-2019 AT&T Intellectual Property.
7 #
8 #   Licensed under the Apache License, Version 2.0 (the "License");
9 #   you may not use this file except in compliance with the License.
10 #   You may obtain a copy of the License at
11 #
12 #          http://www.apache.org/licenses/LICENSE-2.0
13 #
14 #   Unless required by applicable law or agreed to in writing, software
15 #   distributed under the License is distributed on an "AS IS" BASIS,
16 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 #   See the License for the specific language governing permissions and
18 #   limitations under the License.
19 # ==================================================================================
20 import time
21 from threading import Thread
22 from gevent.pywsgi import WSGIServer
23 from a1 import get_module_logger, app
24 from a1 import a1rmr
25
26
27 logger = get_module_logger(__name__)
28
29
30 def start_rmr_thread(real_init=True):
31     """
32     Start a1s rmr thread
33     Also called during unit testing
34     """
35     rmr_loop = a1rmr.RmrLoop(real_init)
36     thread = Thread(target=rmr_loop.loop)
37     thread.start()
38     while not rmr_loop.rmr_is_ready():
39         time.sleep(0.5)
40     return rmr_loop  # return the handle; useful during unit testing
41
42
43 def main():
44     """Entrypoint"""
45     # start rmr thread
46     logger.debug("Initializing rmr thread. A1s webserver will not start until rmr initialization is complete.")
47     start_rmr_thread()
48
49     # start webserver
50     logger.debug("Starting gevent server")
51     http_server = WSGIServer(("", 10000), app)
52     http_server.serve_forever()