-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.py
More file actions
65 lines (52 loc) · 1.72 KB
/
run.py
File metadata and controls
65 lines (52 loc) · 1.72 KB
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
"""Main entry point to run both lab analyzer and Flask web app."""
import asyncio
import logging
import sys
import threading
from config.settings import Config
from lab_analyzer.analyzer import DummyLabAnalyzer
from web.app import create_app
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)
def run_flask_app():
"""Run Flask web application in a separate thread."""
app = create_app()
logger.info(f"Starting Flask web app on {Config.FLASK_HOST}:{Config.FLASK_PORT}")
app.run(
host=Config.FLASK_HOST,
port=Config.FLASK_PORT,
debug=False, # Must be False when running in thread
use_reloader=False # Must be False when running in thread
)
async def run_lab_analyzer():
"""Run lab analyzer asyncio server."""
analyzer = DummyLabAnalyzer(
listen_host=Config.LISTEN_HOST,
listen_port=Config.LISTEN_PORT
)
logger.info(f"Starting Lab Analyzer on {Config.LISTEN_HOST}:{Config.LISTEN_PORT}")
await analyzer.start_server()
def main():
"""Main entry point."""
logger.info("="*60)
logger.info("Starting Lab Analyzer System")
logger.info("="*60)
# Start Flask in a separate thread
flask_thread = threading.Thread(target=run_flask_app, daemon=True)
flask_thread.start()
# Run lab analyzer in the main thread's event loop
try:
asyncio.run(run_lab_analyzer())
except KeyboardInterrupt:
logger.info("Shutting down...")
except Exception as e:
logger.error(f"Error: {e}")
if __name__ == '__main__':
main()