From 3f5f689965e42a0abd91c7e2038056099bd92897 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 17 Oct 2023 20:57:09 +0800 Subject: [PATCH] db lock --- app/db/__init__.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/db/__init__.py b/app/db/__init__.py index 646d16ae..cae4f8a3 100644 --- a/app/db/__init__.py +++ b/app/db/__init__.py @@ -1,3 +1,5 @@ +import threading + from sqlalchemy import create_engine, QueuePool from sqlalchemy.orm import sessionmaker, Session, scoped_session @@ -19,6 +21,9 @@ SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=Engine) # 多线程全局使用的数据库会话 ScopedSession = scoped_session(SessionFactory) +# 数据库锁 +DBLock = threading.Lock() + def get_db(): """ @@ -34,6 +39,18 @@ def get_db(): db.close() +def db_lock(func): + """ + 使用DBLock加锁,防止多线程同时操作数据库 + 装饰器 + """ + def wrapper(*args, **kwargs): + with DBLock: + return func(*args, **kwargs) + + return wrapper + + class DbOper: _db: Session = None @@ -42,3 +59,4 @@ class DbOper: self._db = db else: self._db = ScopedSession() +