1、基於threding.local,推薦使用
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session from models import Student from threading import Thread engine = create_engine( "mysql+pymysql://root:密碼@127.0.0.1:3306/數據庫?charset=utf8", max_overflow=0, # 超過連接池大小外最多創建的連接 pool_size=5, # 連接池大小 pool_timeout=30, # 池中沒有線程最多等待的時間,否則報錯 pool_recycle=-1 # 多久之后對線程池中的線程進行一次連接的回收(重置) ) SessionFactory = sessionmaker(bind=engine) session = scoped_session(SessionFactory) def task(): ret = session.query(Student).all() # 將連接交還給連接池 session.remove() for i in range(20): t = Thread(target=task) t.start()
2、基於多線程
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import Student from threading import Thread engine = create_engine( "mysql+pymysql://root:密碼@127.0.0.1:3306/數據庫?charset=utf8", max_overflow=0, # 超過連接池大小外最多創建的連接 pool_size=5, # 連接池大小 pool_timeout=30, # 池中沒有線程最多等待的時間,否則報錯 pool_recycle=-1 # 多久之后對線程池中的線程進行一次連接的回收(重置) ) SessionFactory = sessionmaker(bind=engine) def task(): # 去連接池中獲取一個連接 session = SessionFactory() ret = session.query(Student).all() # 將連接交還給連接池 session.close() for i in range(20): t = Thread(target=task) t.start()