diff --git a/Start.py b/Start.py index 9786dc7..e7177ad 100644 --- a/Start.py +++ b/Start.py @@ -143,7 +143,23 @@ def _start_api_server(): port = parsed.port or 8080 logger.info(f"启动Web服务器: http://{host}:{port}") - uvicorn.run("reply_server:app", host=host, port=port, log_level="info") + # 在后台线程中创建独立事件循环并直接运行 server.serve() + import uvicorn + try: + config = uvicorn.Config("reply_server:app", host=host, port=port, log_level="info") + server = uvicorn.Server(config) + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(server.serve()) + except Exception as e: + logger.error(f"uvicorn服务器启动失败: {e}") + try: + # 确保线程内事件循环被正确关闭 + loop = asyncio.get_event_loop() + if loop.is_running(): + loop.stop() + except Exception: + pass @@ -248,4 +264,16 @@ async def main(): if __name__ == '__main__': - asyncio.run(main()) \ No newline at end of file + # 避免使用被monkey patch的asyncio.run() + # 使用原生的事件循环管理方式 + try: + loop = asyncio.get_event_loop() + if loop.is_running(): + # 如果事件循环已经在运行,创建任务 + asyncio.create_task(main()) + else: + # 正常启动事件循环 + loop.run_until_complete(main()) + except RuntimeError: + # 如果没有事件循环,创建一个新的 + asyncio.run(main()) \ No newline at end of file