File size: 1,432 Bytes
22dcdfd |
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 |
import asyncio
import logging
import sys
import uvicorn
from dotenv import load_dotenv
from core import settings
load_dotenv()
if __name__ == "__main__":
root_logger = logging.getLogger()
if root_logger.handlers:
print(
f"Warning: Root logger already has {len(root_logger.handlers)} handler(s) configured. "
f"basicConfig() will be ignored. Current level: {logging.getLevelName(root_logger.level)}"
)
logging.basicConfig(level=settings.LOG_LEVEL.to_logging_level())
# Set Compatible event loop policy on Windows Systems.
# On Windows systems, the default ProactorEventLoop can cause issues with
# certain async database drivers like psycopg (PostgreSQL driver).
# The WindowsSelectorEventLoopPolicy provides better compatibility and prevents
# "RuntimeError: Event loop is closed" errors when working with database connections.
# This needs to be set before running the application server.
# Refer to the documentation for more information.
# https://www.psycopg.org/psycopg3/docs/advanced/async.html#asynchronous-operations
if sys.platform == "win32":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
uvicorn.run(
"service:app",
host=settings.HOST,
port=settings.PORT,
reload=settings.is_dev(),
timeout_graceful_shutdown=settings.GRACEFUL_SHUTDOWN_TIMEOUT,
)
|