api_server.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. from pdf_converter_v2.config import API_HOST, API_PORT, LOG_LEVEL
  20. except ImportError:
  21. # 如果绝对导入失败,尝试相对导入
  22. sys.path.insert(0, str(current_dir.parent))
  23. from pdf_converter_v2.api.main import app
  24. from pdf_converter_v2.config import API_HOST, API_PORT, LOG_LEVEL
  25. def parse_args():
  26. """解析命令行参数"""
  27. parser = argparse.ArgumentParser(
  28. description="PDF转换工具API v2 服务器",
  29. formatter_class=argparse.RawDescriptionHelpFormatter,
  30. epilog="""
  31. 示例:
  32. # 使用默认配置启动
  33. python api_server.py
  34. # 指定主机和端口
  35. python api_server.py --host 0.0.0.0 --port 4214
  36. # 指定日志级别
  37. python api_server.py --log-level debug
  38. # 使用workers模式(生产环境)
  39. python api_server.py --workers 4
  40. """
  41. )
  42. parser.add_argument(
  43. "--host",
  44. type=str,
  45. default=API_HOST,
  46. help=f"服务器监听地址 (默认: {API_HOST})"
  47. )
  48. parser.add_argument(
  49. "--port",
  50. type=int,
  51. default=API_PORT,
  52. help=f"服务器监听端口 (默认: {API_PORT})"
  53. )
  54. parser.add_argument(
  55. "--log-level",
  56. type=str,
  57. default=LOG_LEVEL.lower(),
  58. choices=["critical", "error", "warning", "info", "debug", "trace"],
  59. help=f"日志级别 (默认: {LOG_LEVEL.lower()})"
  60. )
  61. parser.add_argument(
  62. "--workers",
  63. type=int,
  64. default=None,
  65. help="工作进程数 (默认: 1,生产环境建议使用多个workers)"
  66. )
  67. parser.add_argument(
  68. "--reload",
  69. action="store_true",
  70. help="启用自动重载(开发模式,不建议在生产环境使用)"
  71. )
  72. return parser.parse_args()
  73. if __name__ == '__main__':
  74. args = parse_args()
  75. print(f"启动PDF转换工具API v2 服务...")
  76. print(f"监听地址: {args.host}:{args.port}")
  77. print(f"访问地址: http://{args.host}:{args.port}")
  78. print(f"API文档: http://{args.host}:{args.port}/docs")
  79. print(f"日志级别: {args.log_level}")
  80. if args.workers:
  81. print(f"工作进程数: {args.workers}")
  82. if args.reload:
  83. print(f"自动重载: 已启用(开发模式)")
  84. print()
  85. uvicorn_config = {
  86. "app": app,
  87. "host": args.host,
  88. "port": args.port,
  89. "log_level": args.log_level,
  90. }
  91. if args.workers:
  92. uvicorn_config["workers"] = args.workers
  93. if args.reload:
  94. uvicorn_config["reload"] = True
  95. uvicorn.run(**uvicorn_config)