api_server.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env python3
  2. # Copyright (c) Opendatalab. All rights reserved.
  3. """
  4. FastAPI服务器启动脚本 v2
  5. 可以通过 python api_server.py 来启动API服务
  6. 支持命令行参数配置
  7. """
  8. import os
  9. import sys
  10. import argparse
  11. from pathlib import Path
  12. # 添加项目根目录到Python路径
  13. current_dir = Path(__file__).parent.absolute()
  14. sys.path.insert(0, str(current_dir))
  15. import uvicorn
  16. # 支持相对导入和绝对导入
  17. try:
  18. from pdf_converter_v2.api.main import app
  19. except ImportError:
  20. # 如果绝对导入失败,尝试相对导入
  21. sys.path.insert(0, str(current_dir.parent))
  22. from pdf_converter_v2.api.main import app
  23. def parse_args():
  24. """解析命令行参数"""
  25. parser = argparse.ArgumentParser(
  26. description="PDF转换工具API v2 服务器",
  27. formatter_class=argparse.RawDescriptionHelpFormatter,
  28. epilog="""
  29. 示例:
  30. # 使用默认配置启动
  31. python api_server.py
  32. # 指定主机和端口
  33. python api_server.py --host 0.0.0.0 --port 4214
  34. # 指定日志级别
  35. python api_server.py --log-level debug
  36. # 使用workers模式(生产环境)
  37. python api_server.py --workers 4
  38. """
  39. )
  40. parser.add_argument(
  41. "--host",
  42. type=str,
  43. default=os.getenv("API_HOST", "0.0.0.0"),
  44. help="服务器监听地址 (默认: 0.0.0.0,可通过环境变量 API_HOST 设置)"
  45. )
  46. parser.add_argument(
  47. "--port",
  48. type=int,
  49. default=int(os.getenv("API_PORT", "4214")),
  50. help="服务器监听端口 (默认: 4214,可通过环境变量 API_PORT 设置)"
  51. )
  52. parser.add_argument(
  53. "--log-level",
  54. type=str,
  55. default=os.getenv("LOG_LEVEL", "info"),
  56. choices=["critical", "error", "warning", "info", "debug", "trace"],
  57. help="日志级别 (默认: info,可通过环境变量 LOG_LEVEL 设置)"
  58. )
  59. parser.add_argument(
  60. "--workers",
  61. type=int,
  62. default=None,
  63. help="工作进程数 (默认: 1,生产环境建议使用多个workers)"
  64. )
  65. parser.add_argument(
  66. "--reload",
  67. action="store_true",
  68. help="启用自动重载(开发模式,不建议在生产环境使用)"
  69. )
  70. return parser.parse_args()
  71. if __name__ == '__main__':
  72. args = parse_args()
  73. print(f"启动PDF转换工具API v2 服务...")
  74. print(f"监听地址: {args.host}:{args.port}")
  75. print(f"访问地址: http://{args.host}:{args.port}")
  76. print(f"API文档: http://{args.host}:{args.port}/docs")
  77. print(f"日志级别: {args.log_level}")
  78. if args.workers:
  79. print(f"工作进程数: {args.workers}")
  80. if args.reload:
  81. print(f"自动重载: 已启用(开发模式)")
  82. print()
  83. uvicorn_config = {
  84. "app": app,
  85. "host": args.host,
  86. "port": args.port,
  87. "log_level": args.log_level,
  88. }
  89. if args.workers:
  90. uvicorn_config["workers"] = args.workers
  91. if args.reload:
  92. uvicorn_config["reload"] = True
  93. uvicorn.run(**uvicorn_config)