From 76dca88ee7d38fb28946d7e0fbd4854b7122803a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 17 Jul 2026 00:09:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E6=97=B6=E4=BC=98=E9=9B=85=E7=AD=89=E5=BE=85=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: stop() 只调用 server.close() 后立即停止事件循环 导致活跃连接收到 GeneratorExit,产生大量 Task destroyed 警告 修复: 使用 run_coroutine_threadsafe 在子线程事件循环中执行 server.wait_closed(),最多等待5秒优雅关闭 --- engine/instances.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/instances.py b/engine/instances.py index 8e9901f..2aaf466 100644 --- a/engine/instances.py +++ b/engine/instances.py @@ -96,8 +96,17 @@ class Socks5Server: if not self.running: return self.running = False - if self.server: - self.server.close() + if self.server and self.loop: + # 在子线程事件循环中优雅关闭服务器 + import concurrent.futures + async def _shutdown(): + self.server.close() + await self.server.wait_closed() + try: + future = asyncio.run_coroutine_threadsafe(_shutdown(), self.loop) + future.result(timeout=5) # 最多等待5秒 + except (concurrent.futures.TimeoutError, Exception): + pass if self.loop: try: self.loop.call_soon_threadsafe(self.loop.stop)