我有以下情况:
config.py
SQLALCHEMY_DATABASE_URI = 'postgresql://a:a@localhost/a'
SQLALCHEMY_POOL_SIZE = 5
SQLALCHEMY_TRACK_MODIFICATIONS = True
models.py
class account_map(db.Model):
__tablename__ = 'account_map'
account_id = db.Column(db.Integer, primary_key=True)
account_key_type = db.Column(db.Text, nullable=False)
account_key_value = db.Column(db.Text, nullable=False)
app.py
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
import models
app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)
@app.route('/account/<int:account_id>', methods=['GET'])
def get_account(account_id):
account = models.account_map.query.get(account_id)
if account:
return jsonify(account.as_dict())
return jsonify(error=404, message=str("Not found"), timestamp=datetime.timestamp(datetime.utcnow())), 404
if __name__ == '__main__':
app.run()
要检查打开的连接数,请执行以下操作:
SELECT * FROM pg_stat_activity where datname = '...';
无论执行多少个请求(我使用过 JMeter 和 25 个并发用户),数据库中只有一个连接打开,吞吐量几乎与我只使用一个线程相同。
更新
我发现为什么我没有看到很多连接是Postgresql:默认情况下,Flask是单线程的。需要指定 threaded = True
启动应用程序时。SQLAlchemy 连接池正在工作。