在单独模块中定义数据库连接池对象:
# dbconnection.py
from DBUtils.PooledDB import PooledDB
dbpools = PooledDB(creator=sql_driver, mincached=mincache, maxcached=maxcache, maxconnections=maxconnections, host=host, port=port, user=user, password=password )
在主程序中导入该模块:
# main.py
import dbconnection
问题来了:
当我们在程序里导入另一个模块或者导入另一个模块的函数或者类的时候,一旦导入,该模块里的代码就会被执行。这意味着,当我们启动程序的时候,数据库连接池dbpools对象会先被创建,创建时会去连接数据库,而这是一个很耗时的操作,会导致程序启动的延迟,若连接数据库失败,程序将无法启动,这在一些场景下不符合运行逻辑。
解决方法:
将连接池对象的初始化操作封装成函数,在需要的时候调用该函数,如下所示:
# dbconnection.py
from DBUtils.PooledDB import PooledDB
dbpools = None
def init_dbpools():
global dbpools
dbpools = PooledDB(creator=sql_driver, mincached=mincache, maxcached=maxcache, maxconnections=maxconnections, host=host, port=port, user=user, password=password )