【发布时间】:2017-03-21 14:32:57
【问题描述】:
如果我不需要事务,我可以为多个请求重用同一个数据库连接吗?
Flask 文档says:
因为数据库连接封装了一个事务,所以我们还需要确保每次只有一个请求使用该连接。
我是这样理解上面这句话的意思的:
Python DB-API 连接一次只能处理一个事务;要开始一个新事务,必须首先提交或回滚前一个事务。因此,如果我们的每个请求都需要自己的事务,那么每个请求当然都需要自己的数据库连接。
如果我弄错了,请告诉我。
但是假设我设置了自动提交模式,并在单个 SQL 语句中处理每个请求。或者,或者,假设我只读取而不是写入数据库。在任何一种情况下,似乎我都可以为我的所有请求重用相同的数据库连接,以节省多个连接的开销。但我不确定这种方法是否有任何缺点。
编辑:我可以看到我提议的一个问题:每个请求可能由不同的进程处理。由于连接应该probably not be reused across processes,让我澄清一下我的问题:我的意思是为每个进程创建一个连接,并将它用于恰好由该进程处理的所有请求。
另一方面,(绿色或本机)线程的全部意义通常是为每个线程提供一个请求,因此我提出的方法意味着跨线程共享连接。好像是one connection can be used concurrently in multiple native threads,但是not in multiple green threads。
因此,具体来说,我的环境是带有多个多线程同步工作者的烧瓶 + gunicorn。
【问题讨论】:
标签: python database web-applications flask