From 10be46426589f954772d1ad49c1488f0e1bef04a Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Fri, 16 Jan 2026 22:46:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=B1=A0=E8=AE=A1=E6=95=B0=E5=92=8C=E4=BB=BB=E5=8A=A1=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E5=99=A8=E9=BB=98=E8=AE=A4=E5=80=BC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. db_pool.py - 修复连接计数不一致问题 - 将 _created_connections 递增移到 put() 成功之后 - 确保 Full 异常和创建异常时正确关闭连接 - 避免计数器永久偏高 2. services/tasks.py - 统一 _running_by_user 默认值 - 将减少计数时的默认值从 1 改为 0 - 与增加计数时的默认值保持一致 - 添加注释说明 Co-Authored-By: Claude Opus 4.5 --- db_pool.py | 19 ++++++++++++++----- services/tasks.py | 6 ++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/db_pool.py b/db_pool.py index c203a4b..3ce43fb 100755 --- a/db_pool.py +++ b/db_pool.py @@ -109,17 +109,26 @@ class ConnectionPool: with self._lock: # 双重检查:确保池确实需要补充 if self._pool.qsize() < self.pool_size: + new_conn = None try: new_conn = self._create_connection() - self._created_connections += 1 self._pool.put(new_conn, block=False) + # 只有成功放入池后才增加计数 + self._created_connections += 1 except Full: # 在获取锁期间池被填满了,关闭新建的连接 - try: - new_conn.close() - except Exception: - pass + if new_conn: + try: + new_conn.close() + except Exception: + pass except Exception as create_error: + # 创建连接失败,确保关闭已创建的连接 + if new_conn: + try: + new_conn.close() + except Exception: + pass print(f"重建连接失败: {create_error}") def close_all(self): diff --git a/services/tasks.py b/services/tasks.py index 74ad36f..bca2d0a 100644 --- a/services/tasks.py +++ b/services/tasks.py @@ -327,7 +327,8 @@ class TaskScheduler: except Exception: with self._cond: self._running_global = max(0, self._running_global - 1) - self._running_by_user[task.user_id] = max(0, self._running_by_user.get(task.user_id, 1) - 1) + # 使用默认值 0 与增加时保持一致 + self._running_by_user[task.user_id] = max(0, self._running_by_user.get(task.user_id, 0) - 1) if self._running_by_user.get(task.user_id) == 0: self._running_by_user.pop(task.user_id, None) self._cond.notify_all() @@ -385,7 +386,8 @@ class TaskScheduler: safe_remove_task(task.account_id) with self._cond: self._running_global = max(0, self._running_global - 1) - self._running_by_user[task.user_id] = max(0, self._running_by_user.get(task.user_id, 1) - 1) + # 使用默认值 0 与增加时保持一致 + self._running_by_user[task.user_id] = max(0, self._running_by_user.get(task.user_id, 0) - 1) if self._running_by_user.get(task.user_id) == 0: self._running_by_user.pop(task.user_id, None) self._cond.notify_all()