forked from jiaoly/financial_system
33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
import socket
|
|
|
|
import uvicorn
|
|
|
|
from financial_system.core.logger import AppLogger
|
|
from financial_system.core.settings import get_settings
|
|
|
|
logger = AppLogger.get_logger(__name__)
|
|
|
|
|
|
def resolve_port(preferred_port: int, fallback_port: int) -> int:
|
|
"""优先使用配置文件端口;被占用时自动切到备用端口。"""
|
|
return preferred_port if is_port_available(preferred_port) else fallback_port
|
|
|
|
|
|
def is_port_available(port: int) -> bool:
|
|
"""用一次本地 TCP 探测判断端口是否可绑定。"""
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
|
return sock.connect_ex(("127.0.0.1", port)) != 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
settings = get_settings()
|
|
AppLogger.configure(settings)
|
|
port = resolve_port(settings.server_port, settings.server_fallback_port)
|
|
logger.info("后端服务启动 host=%s port=%s config_path=%s", settings.server_host, port, settings.config_path)
|
|
uvicorn.run(
|
|
"financial_system.api:app",
|
|
host=settings.server_host,
|
|
port=port,
|
|
reload=False,
|
|
)
|