Merge pull request #102 from aohanhongzhi/feature/debug

Feature/debug
This commit is contained in:
zhinianboke 2025-10-30 08:46:28 +08:00 committed by GitHub
commit 09e5736c8e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -140,7 +140,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
@ -245,4 +261,16 @@ async def main():
if __name__ == '__main__':
asyncio.run(main())
# 避免使用被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())