日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Flask和mysql多线程_数据库连接池Flask-SQLAlchemy中多线程安全的问题

發布時間:2023/12/19 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask和mysql多线程_数据库连接池Flask-SQLAlchemy中多线程安全的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用flask-sqlalchemy寫代碼碼到一半,突然想到,Session是否是線程安全的?于是上官方文檔,答案是否!

那問題來了,怎么破?因為它會牽涉到多線程情況下,調用rollback導致的不可預期影響。

官網給了兩個方案:

使用 Contextual/Thread-local Sessions

不用全局的,而是采用函數間傳遞的session變量

明顯,第一種方式對現在代碼的改動最小,擴展性也更好。因為使用的flask-sqlalchemy,于是參考在線文檔 ,發現table的定義與flask-sqlalchemy quickstart的定義不一致。文檔里面有一句有趣的話

a preconfigured scoped session called session

那是否意味著 flask-sqlalchemy 對 sqlachemy 封裝之后,將session做了多線程支持的封裝?看源碼!

classSQLAlchemy(object):

def __init__(self, app=None, use_native_unicode=True, session_options=None, metadata=None):

if session_options isNone:

session_options ={}

session_options.setdefault('scopefunc', connection_stack.__ident_func__)

self.use_native_unicode =use_native_unicode

self.session =self.create_scoped_session(session_options)

self.Model =self.make_declarative_base(metadata)

self.Query =BaseQuery

self._engine_lock =Lock()

self.app =app

_include_sqlalchemy(self)

if app is notNone:

self.init_app(app)

self.session = self.create_scoped_session(session_options)

從這個變量賦值來看,就是scoped_session,為以防萬一,再跟進去看

def create_scoped_session(self, options=None):

"""Helper factory method that creates a scoped session. It

internally calls :meth:`create_session`.

"""

if options isNone:

options ={}

scopefunc = options.pop('scopefunc', None)

returnorm.scoped_session(partial(self.create_session, options),

scopefunc=scopefunc)

把這個代碼與sqlalchemy的官方scope_session例子對比

from sqlalchemy.orm import scoped_session

from sqlalchemy.orm import sessionmaker

session_factory = sessionmaker(bind=some_engine)

Session = scoped_session(session_factory)

完全一致!

所以,db.session是線程安全的,并且對sqlalchemy做了非常好的封裝,便捷性更上一層樓,放心用吧!

總結

以上是生活随笔為你收集整理的Flask和mysql多线程_数据库连接池Flask-SQLAlchemy中多线程安全的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。